2016-09-14 2 views
0

여러 번 교체해야하는 경우 Stringbuilder 대 문자열을 여러 번 읽었습니다. WIKI 표기법으로 HTML 문자열 (모두 매우 간단한 형식)을 변환해야하고 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 태그의 대소 문자 구분을 , 나는 당신이 더 많은 문자열을 대체해야하는 시나리오에 SB가 권장되지 않기 때문에 비 StringBuilder를 제안 할 것이다.

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

다음을 시도해보십시오 : replaceParameters = new [] { new KeyValuePair ("


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

0

stringbuilder의 장점은 모든 교체 할 때마다 새로운 문자열을 만들지 않는다는 것입니다. 귀하의 구현은이 속성의 혜택을받지 않습니다. 당신은 모두 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

관련 문제