在多次替换需要时,我已多次阅读过使用Stringbuilder与字符串的优点。我需要将一个HTML字符串(所有非常简单的格式)转换为WIKI表示法,并且我将从我在SO上找到的代码中推出自己的字符串。我想知道是否有更简单的方法来做到这一点,以及我如何用它来实现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;
}
答案 0 :(得分: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 :(得分: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;
}