【发布时间】:2009-07-23 17:20:28
【问题描述】:
我正在编写一些想要删除空白行的效率很低的 C# 代码。它这样做:
字符串 b; ... 而 ( b.IndexOf("\n\n") >= 0 ) b = b.替换("\n\n", "\n");单个替换无法处理(例如)输入中的 \n\n\n,因此需要循环。我认为它应该起作用,而且通常会起作用。
但有时它会设法进入无限循环,我不明白如何。在每次迭代中,\n 的数量都应该减少,所以它应该最终终止。
有什么想法吗?
【问题讨论】:
-
你有没有停止的示例行?曾经使用过调试器吗?
-
我的回答显示了一种情况会迫使它无限运行
-
这是我如何得到一个导致无限循环的讨厌字符串: System.IO.StreamReader aFile = System.IO.File.OpenText(@"c:\xfer\s.tab");字符串 b = aFile.ReadToEnd(); aFile.Close();文件 s.tab 包含这 18 个十六进制字节: FF FE 41 00 0D 0A 00 0D 0A 00 0D 0A 00 42 00 这是我的程序的输出: b.Length=8 loop n=1, i=3, b=A ?? ?? B 停留在 i=3, b(i)=10 2573 3328... 完成 n=1, i=3, b=A?? ?? B 所以这与无效的unicode有关。但我仍然认为它不应该发生。
标签: c# string replace infinite-loop