2

我的目标是速度,必须超快。

        string s = something;
        for (int j = 0; j < s.Length; j++)
        {
            if (s[j] == 'ь')
                if(s.Length>(j+1))
                    if(s[j+1] != 'о')
                        s[j] = 'ъ';

它给了我一个错误错误“不能将属性或索引器'string.this [int]'分配给-它是只读的”

我如何以最快的方式做到这一点?

4

3 回答 3

3

至少有两种选择:

  • 使用 StringBuilder 并跟踪前一个字符。
  • 您可以根据您的需要使用正则表达式"ь(?!о)"或简单的字符串替换"ьо"(您的问题似乎自相矛盾)。

我测试了 StringBuilder 方法与正则表达式的性能,差别很小 - 最多为 2 倍:

每秒方法迭代次数
字符串生成器 153480.094
正则表达式(未编译)90021.978
正则表达式(编译)136355.787
字符串。替换 1427605.174

如果性能对您很重要,我强烈建议您先进行一些性能测量,然后再得出最快的方法是什么的结论。

于 2011-01-19T20:47:14.050 回答
3

快捷方式?使用StringBuilder.

最快的方法?始终传递 achar*和 alength而不是 astring以便您可以就地修改缓冲区,但请确保您永远不要修改任何string对象。

于 2011-01-19T20:47:43.863 回答
2

.Net 中的字符串是只读的。你可以使用StringBuilder.

于 2011-01-19T20:47:42.960 回答