Замена плохих символов строки на плохие символы

Я просто подумал, как проще всего заменить строковые символы, которые необходимо заменить впоследствии.

Например:

var str = "[Hello World]";
//enclose all occurences of [ and ] with brackets[] 
str = str.Replace("[","[[]").Replace("]","[]]");
  • Желаемый результат: [[] Hello World []]
  • Фактический результат: [[[]] Hello World []]

Причина в том, что очевидно, вторая замена уже измененной строки.

Итак, как заменить все вхождения «плохих» символов на символы, содержащие «плохие» символы?


Быстрое измерение всех подходов показало, что StringBuilder является наиболее эффективным способом.

Файл 190 КБ (все в миллисекундах)

  regexTime 40.5065
replaceTime 20.8891
StringBuilderTime 6.9776

Файл 7 МБ

  regexTime 1209.3529
replaceTime 403.3985
строкаBuilderTime 175.2583

Кстати, прямой подход StringBuilder из Джона был в два раза быстрее, чем подход Aggregate из Sehe .

Я сделал из него расширение:

public static String EncloseChars(this string input, char[] charsToEnclose, String leftSide, String rightSide) {
    if (charsToEnclose == null || leftSide == null || rightSide == null)
        throw new ArgumentException("Invalid arguments for EncloseChars", charsToEnclose == null ? "charsToEnclose" : leftSide == null ? "leftSide" : "rightSide");
    Array.Sort(charsToEnclose);
    StringBuilder sb = new StringBuilder();
    foreach (char c in input) {
        if (Array.BinarySearch(charsToEnclose, c) > -1)
            sb.Append(leftSide).Append(c).Append(rightSide);
        else 
            sb.Append(c);
    }
    return sb.ToString();
}

"[Hello World]".EncloseChars(new char[]{'[', ']'},"[","]");

8
задан Community 23 May 2017 в 12:03
поделиться