在 C# 中将 Contains 或 IndexOf 与计数器一起使用
Using Contains or IndexOf with counter in C#
我正在尝试将计数器与替换一起使用,但没有成功。
int ObjN = 0;
while (editor.Rtf.Contains("CreateObject") == true)
{
editor.Rtf = editor.Rtf.Replace("CreateObject", "Object" + ObjN++);
}
输出为:
Object0
Object0
Object0
我预计
Object0
Object1
Object2
相反。我怎样才能得到那个输出?
问题是您的替换语句将替换字符串中 "CreateObject" 的所有实例,它不会在替换第一个实例后停止。摆脱替换行,而是使用 .IndexOf 搜索第一个实例的索引,然后手动替换它。
表达式"Object" + ObjN++
将在调用Replace
方法之前计算一次,而不是每次替换都计算一次。使用循环没有帮助,因为 Replace
方法将替换所有实例,而不仅仅是第一个实例。
如果您使用 Regex.Replace
,您可以指定一个函数来创建值:
int cnt = 0;
editor.Rtf = Regex.Replace(editor.Rtf, "CreateObject", m => "Object" + (cnt++));
我正在尝试将计数器与替换一起使用,但没有成功。
int ObjN = 0;
while (editor.Rtf.Contains("CreateObject") == true)
{
editor.Rtf = editor.Rtf.Replace("CreateObject", "Object" + ObjN++);
}
输出为:
Object0
Object0
Object0
我预计
Object0
Object1
Object2
相反。我怎样才能得到那个输出?
问题是您的替换语句将替换字符串中 "CreateObject" 的所有实例,它不会在替换第一个实例后停止。摆脱替换行,而是使用 .IndexOf 搜索第一个实例的索引,然后手动替换它。
表达式"Object" + ObjN++
将在调用Replace
方法之前计算一次,而不是每次替换都计算一次。使用循环没有帮助,因为 Replace
方法将替换所有实例,而不仅仅是第一个实例。
如果您使用 Regex.Replace
,您可以指定一个函数来创建值:
int cnt = 0;
editor.Rtf = Regex.Replace(editor.Rtf, "CreateObject", m => "Object" + (cnt++));