用字符串中的单个空格替换多个连续的空格

时间:2015-01-28 13:02:55

标签: c# string spaces

我目前有这个类用一个替换连续的空格:

public static string RemoveSpacesLoop(string value)
{
   if(value.Contains("  "))
   {
       return RemoveSpacesLoop(value.Replace("  ", " "));
   }
   else
   {
       return value;
   }
}

它有效,但从长远来看可能会导致性能问题。有没有办法简化这个?

1 个答案:

答案 0 :(得分:6)

您可以使用Regex。例如:

var x = "123  456 789    999   0";
var y = Regex.Replace(x, @"\s{2,}", " ");

它将用单个空格替换所有多个空格。

您还可以迭代字符串中的字符并生成新字符串,将这些字符与空格进行比较,如下所示:

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();