Есть ли лучший способ заменить строки?
Я удивлен, что Replace не принимает массив символов или массив строк. Я думаю, что я мог бы написать свое собственное расширение, но мне было любопытно, есть ли лучший способ сделать следующее? Обратите внимание, что последняя замена - это строка, а не символ.
myString.Replace(';', '\n').Replace(',', '\n').Replace('\r', '\n').Replace('\t', '\n').Replace(' ', '\n').Replace("\n\n", "\n");
\t
и\r
включены в\s
. Таким образом, ваше регулярное выражение эквивалентно[;,\s]
.\s
на самом деле это эквивалентно тому,[ \f\n\r\t\v]
что вы включаете туда некоторые вещи, которых не было в первоначальном вопросе. Кроме того, оригинальный вопрос спрашивает, сReplace("\n\n", "\n")
чем не справляется ваше регулярное выражение.Если вы чувствуете себя особенно умным и не хотите использовать Regex:
Вы можете обернуть это в метод расширения без особых усилий.
Изменить: Или просто подождите 2 минуты, и я все равно буду писать это :)
И вуаля ...
источник
Regex.Replace
в 8 раз медленнее, чем несколькоstring.Replace
звонков подряд. и в 4 раза медленнее, чемSplit
+Join
. См. Gist.github.com/MarcinJuraszek/c1437d925548561ba210a1c6ed144452Вы можете использовать функцию агрегирования Linq:
Вот метод расширения:
Пример использования метода расширения:
источник
Это самый короткий путь:
источник
Оооо, ужас производительности! Ответ немного устарел, но все же ...
источник
Строки - это просто неизменяемые массивы символов
Вам просто нужно сделать его изменчивым:
StringBuilder
unsafe
мир и играть с указателями (хотя опасно)и попробуйте перебрать массив символов наименьшее количество раз. Обратите внимание на
HashSet
здесь, так как он избегает проходить последовательность символов внутри цикла. Если вам нужен еще более быстрый поиск, вы можете заменитьHashSet
его оптимизированным поискомchar
(на основеarray[256]
).Пример с StringBuilder
Редактировать - Оптимизированная версия
Тогда вы просто используете это так:
источник
wchar_t
в .net, вы заменяете только подмножество всех возможных символов (и вам нужно 65536 bools, чтобы оптимизировать это ...)Вы также можете просто написать эти методы расширения строк и поместить их в свое решение:
Назовите их так:
И это:
источник
Используйте RegEx.Replace, что-то вроде этого:
Вот больше информации об этой документации MSDN для RegEx.Replace
источник
С точки зрения производительности это, возможно, не лучшее решение, но оно работает.
источник
источник