2016-09-14 2 views
0

Я много раз читал о преимуществах использования Stringbuilder vs. string, когда нужны несколько замен. Мне нужно преобразовать строку HTML (все очень простое форматирование) в нотацию WIKI и собираюсь перевернуть мой код из кода, который я нашел на SO. Мне интересно, есть ли более простой способ сделать это, а также как я могу реализовать преимущества StringBuilder с ним. Все мои попытки до сих пор потерпели неудачу. Пожалуйста, заранее посоветуйте и благодарите.Заменить регистр нечувствительный StringBuilder

public static string ConvertHTML2WIKInotation(string htmlstring) 
     { 
      StringBuilder sb = new StringBuilder(htmlstring); 

      htmlstring = ReplaceInsensitive(htmlstring, "<hr>", "----"); 
      htmlstring = ReplaceInsensitive(htmlstring, "<hr />", "----"); 
      ... etc. 

      return sb.ToString(); 
     } 

     static public string ReplaceInsensitive(this string str, string from, string to) 
     { 
      str = Regex.Replace(str, from, to, RegexOptions.IgnoreCase); 
      return str; 
     } 
+1

Вам будет лучше использовать синтаксический анализатор html. – juharr

ответ

0

Поскольку HTML теги чувствительны к регистру , Я бы предложил не StringBuilder, так как SB не рекомендуется для сценариев, где вам нужно больше заменить строку.

public static string ReplaceMultiple(
      string template, 
      IEnumerable<KeyValuePair<string, string>> replaceParameters) 
{ 
    var result = template; 

    foreach(var replace in replaceParameters) 
    { 
     var templateSplit = Regex.Split(result, 
            replace.Key, 
            RegexOptions.IgnoreCase); 
     result = string.Join(replace.Value, templateSplit); 
    } 

    return result; 
} 
+0

Прошу прощения, я не очень разбираюсь в IEnumerables, как вы собираетесь создавать параметр replaceParameters? – Darkloki

+0

Попробуйте следующее: заменитьParameters = new [] { новый KeyValuePair <строка, строка> ("


", "----"), новый KeyValuePair <строка, строка> ("
", "----") }; –

0

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

public static string ConvertHTML2WIKInotation(string htmlstring) 
    { 
     StringBuilder sb = new StringBuilder(htmlstring); 

     sb.Replace("<hr>", "----"); 
     sb.Replace("<hr />", "----"); 

     return sb.ToString(); 
    } 

Если он должен быть чувствителен к регистру, обратите внимание на: How to do a multiple case insensitive replace using a StringBuilder

+1

Это не будет обрабатывать требование, не учитывающее регистр. – juharr

+0

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

+0

Это не так. В вашем случае, если вы не сделаете это 10000 раз, я бы вместо этого использовал string.replace. – Noppey

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

  • Нет связанных вопросов^_^