我有一行一百万个字母A.在循环中,我将字母A的第一个匹配项替换为“”,直到字母结束。
在更换之前,我必须确定字符串中是否存在,并且我这样做:
var inx = a.IndexOf(b, StringComparison.Ordinal);
if (inx > -1)
{
RemoveAndInsertString(ref a, ref b, ref c, inx);
}
我试过了:
private void RemoveAndInsertString(ref string sourceString, ref string rowToRemove, ref string rowToInsert, int inx)
{
Regex rgx = new Regex(rowToRemove);
sourceString = rgx.Replace(sourceString, rowToInsert, 1);
}
和
private void RemoveAndInsertString(ref string sourceString, ref string rowToRemove, ref string rowToInsert, int inx)
{
if (!String.IsNullOrEmpty(rowToInsert))
{
StringBuilder sb = new StringBuilder(sourceString.Length + rowToInsert.Length);
sb.Append(sourceString.Substring(0, inx));
sb.Append(rowToInsert);
sb.Append(sourceString.Substring(inx + rowToRemove.Length, sourceString.Length - (inx + rowToRemove.Length)));
sourceString = sb.ToString();
}
}
但它太慢了!我做了一个测试,一个字符串长度为1,000,000:0.5秒为10,000次替换,52秒为100,000次替换。如果字符串包含1,000,000个要替换的字符 - 我等不及了!
如何加快更换?
我需要发表评论:这不是一个字符串的循环。情况如下: 我有100000行。行最多可包含1000000个字符。我应该替换substring,如果它存在于字符串中,或者跳过此字符串并在字符串中没有子字符串时进行一些操作。 并且,如果需要,程序中使用的行不支持Unicode。 A的示例 - 这是一个不好的例子,我同意,但这是一个测试,测试我的程序的性能(这不是我的测试)