fli*_*m57 4 c# stringbuilder for-loop
当我调试这个控制台应用程序时,它给出了一个奇怪的结果.显然我忽视了一些东西.
class Program
{
static void Main(string[] args)
{
int ops = int.Parse(Console.ReadLine());
int inte = 0;
StringBuilder roll = new StringBuilder();
Operations(roll, inte, ops);
}
static void Operations(StringBuilder roll, int inte, int ops)
{
for (int i = 0; i < ops; i++)
{
roll.AppendLine(Console.ReadLine());
inte = roll.ToString().IndexOf("^");
if (inte == i)
roll.Remove(i, 1);
if (roll.ToString().IndexOf("!") == i)
roll.Remove(i, 1);
}
Console.WriteLine(roll.ToString());
Console.ReadLine();
}
}
Run Code Online (Sandbox Code Playgroud)
对于输入,为第一个输入键入"3"(整数"inte"),为其他3个ReadLine条目键入"^ A","^ B""^ D".在循环的第一次迭代中,它将按预期删除^.但是在第二次迭代(i = 1)时,它将inte读为3.但它应该是1,因为在第二轮中,Stringbuilder已将"^ B"附加到A,因此它现在是"A ^ B".我正在尝试删除"^"(以及"!"s),因为stringbuilder正在附加字符串.为什么第二轮"inte"整数读数为3?
这是你的问题:
roll.AppendLine(Console.ReadLine());
Run Code Online (Sandbox Code Playgroud)
你正在使用AppendLine,所以在第一次迭代时,它会附加"^ A",然后是回车符('\r')和换行符('\n').删除第一个字符后,字符串中仍然有3个字符.('A','\r'和'\n').这就是为什么^B\r\n" in the second iteration, you find the在索引3而不是索引1 附加^` 之后.
只需将其更改为:
roll.Append(Console.ReadLine());
Run Code Online (Sandbox Code Playgroud)
我怀疑你会得到你期待的结果.