我有一个字符串,其中包含多个用逗号分隔的项目:
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"
它运作良好,但是我问是否还有另一种更优化的方法来获得相同的结果?
答案 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倍。 Regex
和Linq
解决方案比其他解决方案慢几倍
答案 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