在此代码片段中使用 do-while 循环有什么意义

本文关键字:循环 什么 do-while 代码 片段 | 更新日期: 2023-09-27 17:56:58

我刚刚发现了Roslyn源代码,我看到一个代码片段看起来像这样:

var text = stringBuilder.ToString();
int length;
do
{
    length = text.Length;
    text = text.Replace("{'r'n'r'n", "{'r'n");
} while (text.Length != length);

这对我来说看起来很奇怪,因为 String.Replace 方法一次用新值替换指定字符串的所有出现。因此,此循环是第一次执行,执行更改,然后再次执行第二次,什么都不做。然后它结束了。.那么使用loop而不仅仅是编写有什么意义:

var text =  stringBuilder.ToString();
text = text.Replace("{'r'n'r'n", "{'r'n");

甚至更短:

var text = stringBuilder.ToString().Replace("{'r'n'r'n", "{'r'n");

我错过了什么吗?

在此代码片段中使用 do-while 循环有什么意义

假设字符串在左大括号后有三个空行:

"{'r'n'r'n'r'n'r'n"

第一次迭代将产生以下内容:

"{'r'n'r'n'r'n"

第二个将产生这个:

"{'r'n'r'n"

第三个将产生:

"{'r'n"

每次迭代都会删除一个空白行。

是的 -

您缺少字符串在括号"{"之后可能包含两个以上的换行符 - 然后它将继续删除额外的换行符,直到只剩下一个。

它使用递归(某种)来处理一组替换,公开一组新的字符,随后需要以相同的方式替换。