You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# Split、Contains与if语句问题求助:生成单空格分隔字符串

问题分析

你遇到的核心问题是:当用Split(' ')分割开头带空格的字符串时,会产生空字符串元素,而你的判断条件!item.Contains(" ")对空字符串同样成立(因为空字符串里没有空格),所以这些空字符串会被拼接成多余的空格,导致最终结果出现不必要的空格,甚至末尾也会多一个空格。

比如你的输入" WE ARE THE CHAMPIONS MY FRIEND"分割后,input2数组的第一个元素是空字符串,这个元素会触发result += item + " ",也就是往结果里加了一个空格,最后拼接出来的结果会是" WE ARE THE CHAMPIONS MY FRIEND "(开头和结尾都有多余空格),不符合预期。

解决方案

这里有几种更可靠的处理方式,按推荐程度排序:

1. 使用Split的重载移除空元素 + String.Join(最简洁高效)

直接在分割时就去掉空元素,然后用String.Join一次性拼接,避免循环里的低效字符串拼接:

string input = " WE ARE THE CHAMPIONS MY FRIEND";
// 分割时移除所有空元素
string[] input2 = input.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries);
// 用单个空格拼接所有非空元素
string result = string.Join(" ", input2);
Console.WriteLine(result); // 输出: WE ARE THE CHAMPIONS MY FRIEND

2. 修改循环内的判断条件

如果一定要保留循环的写法,把判断条件从!item.Contains(" ")改成!string.IsNullOrEmpty(item)(或者!string.IsNullOrWhiteSpace(item),如果要排除全是空白的元素):

string input = " WE ARE THE CHAMPIONS MY FRIEND";
string[] input2 = input.Split(' ');
string result = "";
foreach (var item in input2)
{
    // 只处理非空的元素
    if (!string.IsNullOrEmpty(item))
        result += item + " ";
}
// 最后去掉末尾多余的空格
result = result.TrimEnd();
Console.WriteLine(result); // 输出: WE ARE THE CHAMPIONS MY FRIEND

注意这里最后要加TrimEnd(),因为循环里每个元素都会加空格,最后一个元素后面也会多一个空格。

3. 使用Trim先处理输入字符串

先把输入字符串的首尾空格去掉,再分割,这样开头的空元素就不会出现了:

string input = " WE ARE THE CHAMPIONS MY FRIEND";
// 先去掉首尾空格
string trimmedInput = input.Trim();
string[] input2 = trimmedInput.Split(' ');
string result = string.Join(" ", input2);
Console.WriteLine(result); // 输出: WE ARE THE CHAMPIONS MY FRIEND

不过这种方式如果字符串中间有多个连续空格的话,分割后还是会有空元素,所以不如第一种方法可靠。

为什么原来的判断逻辑不对?

空字符串""本身不包含空格,所以!item.Contains(" ")的结果是true,会执行拼接操作,导致往结果里加了一个多余的空格。而我们真正需要过滤的是空的或者全是空白的元素,所以判断空字符串才是正确的逻辑。

内容的提问来源于stack exchange,提问作者Rick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:23:03