У Ричарда хороший ответ, но производительность на более длинных струнах может немного снизиться (примерно на 25% медленнее, чем при замене прямой строки, как показано в вопросе). Я чувствовал себя законченным, чтобы посмотреть на это немного дальше. На самом деле, в StackOverflow уже есть несколько хороших связанных ответов:
Самый быстрый способ удалить символы из строки
C # Разбор / преобразование одного или нескольких символов
Существует также хорошая статья о CodeProject, охватывающая различные варианты.
http://www.codeproject.com/KB/string/fastestcscaseinsstringrep.aspx
Объяснить, почему функция, представленная в ответе Ричардса, становится медленнее с более длинными строками, связано с тем, что замены происходят по одному символу за раз; таким образом, если у вас есть большие последовательности не сопоставленных символов, вы тратите лишние циклы, повторно добавляя вместе строку. Таким образом, если вы хотите взять несколько моментов из статьи CodePlex, вы получите слегка измененную версию ответа Ричардса, которая выглядит следующим образом:
private static readonly Char[] ReplacementChars = new[] { 'á', 'é', 'í', 'ü', 'ñ' };
private static readonly Dictionary<Char, Char> ReplacementMappings = new Dictionary<Char, Char>
{
{ 'á', 'a'},
{ 'é', 'e'},
{ 'í', 'i'},
{ 'ü', 'u'},
{ 'ñ', '&'}
};
private static string Translate(String source)
{
var startIndex = 0;
var currentIndex = 0;
var result = new StringBuilder(source.Length);
while ((currentIndex = source.IndexOfAny(ReplacementChars, startIndex)) != -1)
{
result.Append(source.Substring(startIndex, currentIndex - startIndex));
result.Append(ReplacementMappings[source[currentIndex]]);
startIndex = currentIndex + 1;
}
if (startIndex == 0)
return source;
result.Append(source.Substring(startIndex));
return result.ToString();
}
ПРИМЕЧАНИЕ Не все граничные случаи были проверены.
ПРИМЕЧАНИЕ Может заменить ReplacementChars на ReplacementMappings.Keys.ToArray () за небольшую плату.
Предполагая, что НЕ каждый символ является заменяющим символом, тогда он будет работать немного быстрее, чем прямые замены строк (опять же около 20%).
При этом помните, что при рассмотрении затрат на производительность, о чем мы на самом деле говорим ... в данном случае ... разница между оптимизированным решением и исходным решением составляет около 1 секунды на 100 000 итераций на строке из 1000 символов.
В любом случае, просто хотел добавить информацию к ответам на этот вопрос.