2016-09-14 2 views
0

Ich habe viele Male über die Tugend der Verwendung von Stringbuilder vs. Zeichenfolge gelesen, wenn mehrere Ersetzungen benötigt werden. Ich muss eine HTML-Zeichenkette (alle sehr einfache Formatierung) in WIKI-Notation umwandeln und würde meine eigene aus dem Code rollen, den ich auf SO gefunden habe. Ich frage mich, ob es eine einfachere Möglichkeit gibt, dies zu tun, und auch, wie ich die Vorteile eines StringBuilder damit implementieren kann. Alle meine Versuche sind bis jetzt kläglich gescheitert. Bitte beraten und bedanken Sie sich im Voraus.Ersetzen Sie Case Insensitive 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

Sie wären besser dran mit einem HTML-Parser. – juharr

Antwort

0

Da unempfindlich HTML-Tags Fall , Würde ich nicht StringBuilder vorschlagen, da SB nicht für die Szenarien empfohlen wird, in denen Sie mehr ersetzen Zeichenfolge benötigen.

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

Es tut mir leid, ich bin nicht gut mit IEnumerables vertraut. Wie gehen Sie beim Erstellen des Parameters replaceParameters vor? – Darkloki

+0

Versuchen Sie Folgendes: replaceParameters = new [] { new KeyValuePair ("


", "----"), new KeyValuePair ("
", "----") }; –

0

Der Vorteil von stringbuilder ist, dass Sie bei jedem Austausch keine neue Zeichenfolge erstellen. Ihre Implementierung profitiert nicht von dieser Eigenschaft. Wenn Sie einen Stringbuilder verwenden, tatsächlich tun Transformationen auf dem Stringbuilder, nicht auf dem Eingabestring Parameter:

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

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

     return sb.ToString(); 
    } 

Wenn es unempfindlich Fall sein muss, schauen: How to do a multiple case insensitive replace using a StringBuilder

+1

Dies wird nicht die Groß- und Kleinschreibung beachten. – juharr

+0

danke für die schnelle Antwort. Wie hilft mir das bei der Groß-/Kleinschreibung? – Darkloki

+0

Es tut es nicht. In Ihrem Fall, wenn Sie es nicht 10000 Mal machen, würde ich stattdessen string.replace verwenden. – Noppey