2011-01-19 21 views
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]“не может быть назначен - это только для чтения»

Как сделать это самый быстрый способ?

+0

Можете ли вы объяснить этот процесс? Какова ваша конечная цель? –

+0

Какую возможную причину вы могли бы сделать? просто любопытно. – VoodooChild

+0

Похоже, вы забыли} в конце. Я думаю, что основная идея состоит в том, чтобы автокорректировать русские слова, потому что есть некоторые правила в отношении символов ''' и' ь' :) – Elalfer

ответ

3

Есть как минимум два варианта:

  • Используйте StringBuilder и отслеживающий предыдущего символ.
  • Вы можете просто использовать регулярное выражение "ь(?!о)" или просто замену строки "ьо" в зависимости от ваших потребностей (ваш вопрос кажется противоречивым).

Я протестировал производительность StringBuilder подхода по сравнению с регулярными выражениями, и есть очень мало разницы - самое большее 2 раза:

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

Если производительность имеет решающее значение для вас, я бы сильно рекомендуем сделав некоторые измерения производительности, прежде чем перейти к выводам о том, что самый быстрый подход.

+0

Регулярные выражения очень хорошие, но я не знаю, достаточно ли это. Ты можешь сказать? –

+0

@ Джон Брок: Да, я приурочил его, и я думаю, что его, вероятно, достаточно быстро. Возможно, вам стоит потратить время на ваши конкретные данные. –

2

Строки в .Net доступны только для чтения. Вы можете использовать StringBuilder.

3

Быстрый способ? Используйте StringBuilder.

Самый быстрый способ? Всегда передавайте char* и length вместо string, чтобы вы могли модифицировать буфер на месте, но не делайте никаких изменений в объекте string.

+0

что-то говорит мне, что это может быть шуткой, не так ли? – VoodooChild

+0

... нет, это не так. Что заставляет вас думать, что это шутка? – Mehrdad

+0

Что относительно string.toCharArray, а затем изменить это? –

Смежные вопросы