我想写一个 if 语句,它基本上会说,“如果输入到最后一个 Console.ReadLine() 方法中的内容包含一个“!””......做点什么。
所以,我有一个方法:
static void Operations(StringBuilder bleh, int ops, int count, string str)
{
for (int i = 0; i < ops; i++)
{
bleh.Append(Console.ReadLine()); // Potential value of "ops" is > 100,000
if (bleh.ToString().IndexOf("!") != -1)
{
bleh.Replace("!", "");
}
else
{
bleh.Remove(0, 1);
bleh.Replace("^", "");
}
...
在每个 readLine() 上都有一个“!” + 输入一个字母或只是一个“^”。如果输入了“^”,则字符串生成器的第一个索引字符以及“^”都会被删除。如果一个 ”!” 输入,只是“!” 被删除,但字母仍然存在。
我的代码似乎很慢,因为在我从 ReadLine() 附加了一个新字符串之后,它必须搜索“!” 或在循环的每次迭代中可能存在巨大字符串中的“^”,然后再次搜索以将其删除。如果我可以跟踪“^”和“!”的时间会更好。已输入,从而允许我使用索引值替换它们:
bleh.Replace(counter, 1)
在这里获取索引值有点棘手,因为字符串构建器的大小根据输入的值而增长和缩小。
这就提出了一个有趣的问题:“StringBuilder.Replace("abc", "a") 之类的东西是如何完成的?对于一个 10,000 个字符长的字符串,它是从字符串的开头搜索并“滚动”通过它要找到“abc”吗?由于.Append 方法将“!2”,例如,放在最后,性能会受到影响。
是否有一个简单的答案可以提高性能?