在此代码片段中使用 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");
我错过了什么吗?
假设字符串在左大括号后有三个空行:
"{'r'n'r'n'r'n'r'n"
第一次迭代将产生以下内容:
"{'r'n'r'n'r'n"
第二个将产生这个:
"{'r'n'r'n"
第三个将产生:
"{'r'n"
每次迭代都会删除一个空白行。
是的 -
您缺少字符串在括号"{"之后可能包含两个以上的换行符 - 然后它将继续删除额外的换行符,直到只剩下一个。
它使用递归(某种)来处理一组替换,公开一组新的字符,随后需要以相同的方式替换。