具有双空格的String.Replace失败

时间:2014-06-12 14:09:40

标签: vb.net visual-studio-2012

我试图用单个空格替换所有双空格。

但是,在以下情况下,这不起作用:

Dim s As String = "SECTIONSHOMESEARCHSKIP TO CONTENTSKIP TO NAVIGATIONVIEW MOBILE VERSION   SETTINGS  Loading...    MAGAZINE    JUNE 11, 2014  Photo    Credit Jude Edginton for The New York Times  Continue reading the main storyContinue reading the main story  Talk  Intervie..."

s = s.Replace("  ", " ")

Debug.Assert(InStr(s, "  ", CompareMethod.Binary) = 0)'Assertion occurs

有人看到这里可能出现的问题吗?

谢谢!

3 个答案:

答案 0 :(得分:2)

你有长度>的空格2,这就是为什么它不起作用。

您可以String.Split + StringSplitOptions.RemoveEmptyEntries使用String.Join

s = String.Join(" ", s.Split({" "c}, StringSplitOptions.RemoveEmptyEntries))

答案 1 :(得分:1)

你需要循环,因为超过2个空格的东西不会在第一次迭代中完成

do
  s = s.Replace("  ", " ")
loop until while InStr(s, "  ", CompareMethod.Binary)=0

答案 2 :(得分:1)

您可以使用Regex.Replace

Dim s As String = "SECTIONSHOMESEARCHSKIP TO CONTENTSKIP TO NAVIGATIONVIEW MOBILE VERSION   SETTINGS  Loading...    MAGAZINE    JUNE 11, 2014  Photo    Credit Jude Edginton for The New York Times  Continue reading the main storyContinue reading the main story  Talk  Intervie..."
Dim r = Regex.Replace(s, "[ ]{2,}", " "c)
Console.WriteLine(r)

=> SECTIONSHOMESEARCHSKIP TO CONTENTSKIP TO NAVIGATIONVIEW MOBILE VERSION SETTINGS Loading... MAGAZINE JUNE 11, 2014 Photo Credit Jude Edginton for The New York Times Continue reading the main storyContinue reading the main story Talk Intervie...

Regex.Replace "[ ]{2,}", " "c表示查找任何两个或更多空格的序列,并用一个空格字符替换它。

修改 我很想知道Regex与Tim Schmelter提出的基于string.Join / Split的解决方案之间的性能差异。似乎尽管分割线所需的所有工作,构建阵列然后重新加入所有内容,Tim的提议方法更快。

Dim sw = new Stopwatch()
sw.Start()
for i = 0 to 1000000
Dim r = Regex.Replace(s, "[ ]{2,}", " "c)
Next
sw.Stop
Console.WriteLine("Regex:" & sw.ElapsedMilliseconds)

sw = new Stopwatch()
sw.Start()
for i = 0 to 1000000
    s = String.Join(" ", s.Split({" "c}, StringSplitOptions.RemoveEmptyEntries))
Next
sw.Stop
Console.WriteLine("Split/Join: " & sw.ElapsedMilliseconds)

我的电脑上的输出

Regex: 6265 
Split/Join: 3745