我有一个字符串,其中包含多个用逗号分隔的项目:
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)
它运作良好,但我问是否有另一种更优化的方法来获得相同的结果?
我想你需要删除空格的字符串。你可以用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)
正则表达式方法将确保替换所有空白字符,包括制表符、空格等
请参阅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)
这种实现更有效,因为它不会产生任何字符串分配,除了最终结果。它只处理输入字符串并读取一次。
小智 7
不是你要找的吗?
var noWhiteSpaces = RESULT.Replace(" ", string.Empty);
Run Code Online (Sandbox Code Playgroud)
你可以Trim():
var split = RESULT.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
.Select(s=> s.Trim());
Run Code Online (Sandbox Code Playgroud)