如何在位置更改字符串

时间:2011-01-19 20:45:52

标签: c# chars

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

        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]'无法分配给它 - 它是只读的”

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

3 个答案:

答案 0 :(得分:3)

至少有两个选择:

  • 使用StringBuilder并跟踪前一个字符。
  • 您可以使用正则表达式"ь(?!о)""ьо"的简单字符串替换,具体取决于您的需求(您的问题似乎是自相矛盾的)。

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

Method              Iterations per second
StringBuilder                  153480.094
Regex (uncompiled)              90021.978
Regex (compiled)               136355.787
string.Replace                1427605.174

如果性能对您至关重要,我会强烈建议进行一些性能测量,然后再得出关于最快方法的结论。

答案 1 :(得分:3)

快捷方式?使用StringBuilder

最快的方式?始终传递char*length而不是string,以便您可以就地修改缓冲区,但请确保不要修改任何string个对象

答案 2 :(得分:2)

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