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

use*_*989 1 c# string spaces

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

public static string RemoveSpacesLoop(string value)
{
   if(value.Contains("  "))
   {
       return RemoveSpacesLoop(value.Replace("  ", " "));
   }
   else
   {
       return value;
   }
}
Run Code Online (Sandbox Code Playgroud)

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

And*_*yev 6

你可以用Regex.例如:

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

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

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

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();
Run Code Online (Sandbox Code Playgroud)

  • 说明:\ s是空格{2,}的正则表达式语法,表示连续2个或更多.因此,这个正则表达式查找2个或更多连续的空格,并用一个空格替换它们. (2认同)