删除字符串 C# 中元素中的空格

Ing*_*018 6 c# split

我有一个字符串,其中包含多个用逗号分隔的项目:

 string RESULT =  "D_CA,     P_AMOUNT    ,D_SH,D_CU,D_TO,D_GO,D_LE,D_NU,D_CO,D_MU,D_PMU,D_DP,    P_COMMENT      ";
Run Code Online (Sandbox Code Playgroud)

如您所见,某些元素包含空格,我的对象是删除所有空格,这是我的代码:

    RESULT.Split(',').ToList().ForEach(p =>
        if (p.Contains(" "))
        {
               RESULT = RESULT.Replace(p, p.Trim());
        }
        });
Run Code Online (Sandbox Code Playgroud)

这是我的结果:

"D_CA,P_AMOUNT,D_SH,D_CU,D_TO,D_GO,D_LE,D_NU,D_CO,D_MU,D_PMU,D_DP,P_COMMENT"
Run Code Online (Sandbox Code Playgroud)

它运作良好,但我问是否有另一种更优化的方法来获得相同的结果?

Anu*_*wan 8

我想你需要删除空格的字符串。你可以用String.Replace()

RESULT = RESULT.Replace(" ",string.Empty);
Run Code Online (Sandbox Code Playgroud)

或者,您也可以使用 Regex 进行替换,

RESULT = Regex.Replace(RESULT,@"\s",string.Empty);
Run Code Online (Sandbox Code Playgroud)

正则表达式方法将确保替换所有空白字符,包括制表符、空格等


Mar*_*und 7

请参阅Pavel Anikhouski回答,它检查了所有建议解决方案的性能,实际上表明简化的 LINQ 解决方案对性能没有太大帮助 - 很高兴知道 :-)。

使用 LINQ 的更简单解决方案:

string.Join(string.Empty, input.Where(c=>!char.IsWhiteSpace(c)));
Run Code Online (Sandbox Code Playgroud)

首先我们过滤掉所有空白字符,然后将它们连接成一个字符串。这只有一个字符串分配(用于创建结果字符串)并处理所有类型的空白字符,而不仅仅是空格。

原答案

使用 aStringBuilder构建结果字符串,然后使用 a遍历输入字符串foreach,始终检查char.IsWhiteSpace(character)。如果字符不是空格,则StringBuilder通过调用Append(character)方法将其附加到 中。在刚刚结束调用返回的结果字符串ToString()StringBuilder

var builder = new StringBuilder();
foreach(var character in input)
{
   if (!char.IsWhiteSpace(character))
   {
      builder.Append(character);
   }
}
return builder.ToString();
Run Code Online (Sandbox Code Playgroud)

这种实现更有效,因为它不会产生任何字符串分配,除了最终结果。它只处理输入字符串并读取一次。

  • 由于OP要求优化解决方案,我认为性能是首要考虑的问题。但商定的正则表达式和 LINQ 解决方案比我最初发布的解决方案更具可读性:-D (2认同)

小智 7

不是你要找的吗?

var noWhiteSpaces = RESULT.Replace(" ", string.Empty);
Run Code Online (Sandbox Code Playgroud)

  • 这仅适用于空格,不适用于一般空白字符。 (2认同)

Ste*_*pUp 5

你可以Trim()

var split = RESULT.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
    .Select(s=> s.Trim());
Run Code Online (Sandbox Code Playgroud)