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

时间:2020-01-10 09:39:54

标签: 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      ";

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

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

这是我的结果:

"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"

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

9 个答案:

答案 0 :(得分:8)

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

RESULT = RESULT.Replace(" ",string.Empty);

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

RESULT = Regex.Replace(RESULT,@"\s",string.Empty);

regex方法将确保替换所有空格字符,包括制表符,空格等

答案 1 :(得分:7)

请参阅answer by Pavel Anikhouski,该文件检查了所有建议的解决方案的性能,并实际上表明简化的LINQ解决方案对性能没有太大帮助-知道:-)。

使用LINQ的简单解决方案:

string.Join(string.Empty, input.Where(c=>!char.IsWhiteSpace(c)));

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

原始答案

使用StringBuilder生成结果字符串,然后使用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();

此实现效率更高,因为除了最终结果外,它不产生任何字符串分配。它仅与输入字符串一起使用,并读取一次。

答案 2 :(得分:7)

您不是要找什么吗?

var noWhiteSpaces = RESULT.Replace(" ", string.Empty);

答案 3 :(得分:5)

您可以Trim()

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

答案 4 :(得分:4)

您可以为此使用以下扩展方法

public static class Ext
{
    public static string RemoveWhitespaces(this string input)
    {
        return new string(input.ToCharArray()
            .Where(c => !char.IsWhiteSpace(c))
            .ToArray());
    }
}

用法样本

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      ";
RESULT = RESULT.RemoveWhitespaces();

Char.IsWhiteSpace method表示所有Unicode空格字符。

以下所有提议的解决方案都有一个简单的基准。就性能而言,通常的Replace是最快的方法,但不会删除所有空白字符。使用StringBuilder的解决方案在性能和功能方面似乎最为相关,它比上述扩展要快大约2倍。 RegexLinq解决方案比其他解决方案慢几倍

enter image description here

答案 5 :(得分:3)

您可以像这样简化代码:

RESULT.Replace(" ", string.Empty).Split(',');

假设您需要Enumerable中的元素。否则,只有Replace()应该适合您。

答案 6 :(得分:1)

我只能补充说,您可以将linq放入静态方法

public static class Utility
{
    public static string RemoveWhitespaces(this string input)
    {
        return string.Join(string.Empty, input.Where(c => !char.IsWhiteSpace(c)));
    }
}

,然后将其与您的任何字符串一起使用:

Console.WriteLine("asdas asdas sa   asdasd232 sd".RemoveWhitespaces());

答案 7 :(得分:0)

RESULT.Replace(“”,string.Empty);

答案 8 :(得分:-1)

您可以使用.Trim()来创建没有任何空格的新字符串。

string x = "Hello World";
console.writeline(x.Trim());
//Output : "HelloWorld"

您可以在此处检查string.Trim()的其他重载: String.Trim Method