我有一种方法可以替换除我指定的字符之外的每个字符。例如,
ReplaceNot("test. stop; or, not", ".;/\\".ToCharArray(), '*');
会回来
“****.*****;***,****”。
现在,这不是过早优化的一个例子。我在网络操作期间多次调用此方法。我发现在较长的字符串上,它会导致一些延迟,删除它会有所帮助。任何有助于加快这一进程的帮助将不胜感激。
public static string ReplaceNot(this string original, char[] pattern, char replacement)
{
int index = 0;
int old = -1;
StringBuilder sb = new StringBuilder(original.Length);
while ((index = original.IndexOfAny(pattern, index)) > -1)
{
sb.Append(new string(replacement, index - old - 1));
sb.Append(original[index]);
old = index++;
}
if (original.Length - old > 1)
{
sb.Append(new string(replacement, original.Length - (old + 1)));
}
return sb.ToString();
}
最后#。我还为 3K 字符串添加了一个测试用例,以 100K 次而不是 1M 次运行,以查看每个缩放的效果。唯一令人惊讶的是正则表达式比其他表达式“缩放得更好”,但这无济于事,因为它开始时非常慢:
用户短*1M长*100K规模 约翰 319 2125 6.66 路加福音 360 2659 7.39 古法 409 2827 6.91 矿山 447 3372 7.54 DirkGently 1094 9134 8.35 迈克尔 1591 12785 8.04 彼得 21106 94386 4.47
更新:我为彼得版本的正则表达式创建一个静态变量,并将其设置为 RegexOptions.Compiled 以公平起见:
用户短*1M长*100K规模 彼得 8997 74715 8.30
Pastebin 链接到我的测试代码,如果有错误请纠正我: http://pastebin.com/f64f260ee