我正在使用 C#。 NET 2.0 和 WinForms。
我有一段代码,其在汇编中的格式如下:
VARIABLE = 40
ADDRESS = $60
LDA VARIABLE;
STA ADDRESS;
输出应该是:
!VARIABLE = 40
!ADDRESS = $60
LDA !VARIABLE;
STA !ADDRESS;
当然,远不止这些。就像 2000 行一样,但重点是文件顶部有声明,我可以加载/保存或对它们执行任何操作。但我的问题是,我必须在所有这些声明(即使在原始代码中)“前面添加”!。
我当前的方法是这样的:
var defs = tab.tb.GetRanges(@"^\s*([A-Za-z0-9_]+){4,255}\s*=", RegexOptions.Multiline); // all declarations are formatted like this, so use regex to get all of them
foreach (var def in defs)
{
string actual = def.Text.Substring(0, def.Text.IndexOf(' ')); // remove the = sign since its not used in actual code
txt = txt.Replace(actual, "!" + actual);
}
但是,这种方法非常慢。 “修复”我的文件中的所有声明大约需要 3 秒钟。还有更好的办法吗?郑重声明,语法与普通文本框略有不同,因为我使用的是 http://www.codeproject.com/KB/edit/FastColoredTextBox_.aspx作为我的文本控件。
最佳答案
我怀疑您的性能问题在于对 str
进行替换。 .NET 中的字符串是不可变的,因此当您执行任何更改字符串的操作(追加、替换等)时,.NET 必须创建一个新字符串并将旧字符串复制到其中(其中全部 2000 行),再加上变化。尝试将字符串加载到 StringBuilder (可变的)中并使用其 native .Replace() 方法。
关于c# - 在字符串的所有实例前面添加一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8600579/