关于c#:用字符串中的单个空格替换多个连续的空格

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;
   }
}

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


您可以使用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();