从字符串中删除多余的空白区域

mar*_*ria 7 vb.net spaces

我想使用VB.net删除多余的空格

恩.

"The   Quick          Brown Fox"
Run Code Online (Sandbox Code Playgroud)

我想要输出

"The Quick Brown Fox"
Run Code Online (Sandbox Code Playgroud)

谢谢,英寸

Fre*_*örk 22

您可以使用简单的正则表达式:

Dim cleaned As String = Regex.Replace(input, "\s{2,}", " ")
Run Code Online (Sandbox Code Playgroud)


bha*_*mby 6

我意识到这个问题相当陈旧,但还有另一个选项不涉及正则表达式,或者手动循环字符串并替换:

Private Function StripSpaces(input As String) As String
    Return String.Join(" ", input.Split(New Char() {}, StringSplitOptions.RemoveEmptyEntries))
End Function
Run Code Online (Sandbox Code Playgroud)

和C#等价:

private string StripSpaces(string input)
{
    return string.Join(" ", input.Split((char[])null, StringSplitOptions.RemoveEmptyEntries));
}
Run Code Online (Sandbox Code Playgroud)

使用"null"值作为拆分字符String.Split会导致拆分字符成为所有字符,如果它们被发送,则返回true Char.IsWhiteSpace.因此,以这种方式调用方法将在所有空格上拆分字符串,删除空字符串,然后将每个拆分数组元素之间的单个空格重新连接在一起.


SWe*_*eko 5

您真正想要的是将任何多个空格压缩为一个空格,一种方法是搜索两个空格并将它们替换为一个空格,直到没有两个相邻的空格为止,如下所示:

   Dim myString As String = "The   Quick     Brown     Fox"
   While myString.IndexOf("  ") <> -1
       myString = myString.Replace("  ", " ")
   End While
   Console.WriteLine(myString)
Run Code Online (Sandbox Code Playgroud)

然而,这并不是万无一失的,因为.net 字符串的一些特性,这可能会进入无限循环,但仅限于一些非常奇怪的输入。


编辑:正如其他答案中所指出的那样,使用正则表达式可以更快(更简单)地进行此特定处理。