Replacing multiple consecutive spaces by a single space in a string
我现在有一个类来替换连续空格:
1 2 3 4 5 6 7 8 9 10 11
| public static string RemoveSpacesLoop(string value)
{
if(value.Contains(" "))
{
return RemoveSpacesLoop(value.Replace(" ",""));
}
else
{
return value;
}
} |
它可以工作,但从长远来看,它可能会导致性能问题。有没有办法简化这个?
- 递归调用的意义是什么?根据docs,replace返回"一个与当前字符串等效的字符串,但oldvalue的所有实例都替换为newvalue。"
- 您是否将性能与执行while循环进行了比较?
- @安德烈,以防连续四个空格?
- @罗琳,哦,我明白了,谢谢你的澄清。
- 为什么不使用value.replace("",")?
- 我想您希望将多个空间折叠成一个空间,而不是通常的"删除空间"??
- @他想用一个空格替换多个空格,而不是完全删除它们。
- 一个好的规范是一个好程序的第一步。
- @是的,对不起,我错过了!
- 它可以通过一个字符的单次复制数组来完成。按字符复制,记住复制空间的时间,以跳过复制更多连续的空间。进行2次传递以了解目标数组大小或使用列表。
您可以使用Regex。例如:
1 2
| var x ="123 456 789 999 0";
var y = Regex.Replace(x, @"\s{2,}",""); |
它将用单个空格替换所有多个空格。
您还可以迭代字符串中的字符,并生成新的字符串,将这些字符与空格进行比较,如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| StringBuilder sb = new StringBuilder ();
bool isSpaceFound = false;
foreach (char c in x )
{
if (c == ' ')
{
if (!isSpaceFound )
sb .Append(c );
isSpaceFound = true;
}
else
{
isSpaceFound = false;
sb .Append(c );
}
}
var y = sb .ToString(); |
- 解释:s是空格2的regex语法,表示2个连续或更多。所以这个正则表达式查找2个或更多连续的空格,并用一个空格替换它们。
- 问题是速度慢@andykomeyev
- @用户3702989使用的字符串有多长?对于regex来说,它应该是非常长的字符串——可能是兆字节的长度。
- @用户3702989没有任何条件,你不能只说"…它很慢"。与蜗牛相比,它的发光速度很快。定义慢。
- @Andykorneyev它们可以是25到1之间的任何东西
- @用户3702989"从25到1"?这意味着什么?你的测量单位是什么?是字符串长度还是空格数?
- @Andykorneyev,即字符串长度
- @用户3702989"25"的测量单位是什么?字节,千字节,兆字节?
- @用户3702989无论如何,如果您不想使用regex,您可以逐个迭代字符串中的字符,并做一些简单的比较。我已经用样本更新了答案。是的,我真的怀疑这个方法连接多个空间的速度比现在快。;)
- @Andykorneyev是一个由25个字符组成的字符串
- @用户3702989哦,相信我-regex在25个字符的字符串上不能太慢。它可能比逐个迭代字符的速度稍慢,但差异是微不足道的。