2011-04-14 75 views

回答

22

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

Dim cleaned As String = Regex.Replace(input, "\s{2,}", " ") 
+0

感谢fredrik它的工作原理。 – maria 2011-04-14 12:50:42

3

试试这个:

Dim output As String = Regex.Replace("The Quick   Brown Fox","\\s+" , " ") 
+0

谢谢Cyber​​nate – maria 2011-04-14 12:51:13

+0

如果字符串不止一行,这不起作用。 – SezMe 2017-01-13 07:28:57

4

实际上你想要的是将任何多个空白空间压缩到一个空间,一种方法是搜索两个空格并用一个空格替换它们,直到没有两个相邻的空格,像这样:

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

然而,这不是防呆因为.net strings一些ideosyncracies,这可能会进入一个无限循环,但仅限于一些非常奇怪的投入。


编辑:这个特殊的处理速度更快(也更简单),使用正则表达式,正如在其他答案中指出的那样。

+0

感谢您的回复我刚刚使用REGEX – maria 2011-04-14 12:52:16

6

我意识到这个问题是相当老,但不涉及正则表达式,或手动通过串循环和更换另一种选择:

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

和C#相当于:

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

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

+0

喜欢它,谢谢分享 – user2793447 2015-02-03 16:49:28