Tim*_*ter 8 .net c# string replace
我只是想知道什么是替换必须随后替换的字符串字符的最简单方法.
例如:
var str = "[Hello World]";
//enclose all occurences of [ and ] with brackets[]
str = str.Replace("[","[[]").Replace("]","[]]");
Run Code Online (Sandbox Code Playgroud)
[[]Hello World[]]
[[[]]Hello World[]]
原因显然是已经修改过的字符串的第二个替换.
那么如何用包含"坏"字符的字符替换所有"坏"字符的出现?
快速测量所有方法表明StringBuilder是最有效的方法.
190kb文件(全部以毫秒为单位)
Run Code Online (Sandbox Code Playgroud)regexTime 40.5065 replaceTime 20.8891 stringBuilderTime 6.9776
7MB文件
Run Code Online (Sandbox Code Playgroud)regexTime 1209.3529 replaceTime 403.3985 stringBuilderTime 175.2583
顺便说一句,John的直接StringBuilder
方法 是Sehe的Aggregate方法的两倍.
我做了一个扩展:
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[]{'[', ']'},"[","]");
Run Code Online (Sandbox Code Playgroud)
这是一种非常不酷的方式.但它的优点是非常接近万无一失,我认为,并且不使用正则表达式(如果您不想使用正则表达式).
StringBuilder sb = new StringBuilder();
foreach (char c in str.ToCharArray()) {
if (c == '[' || c == ']') {
sb.Append('[' + c + ']');
}
else {
sb.Append(c);
}
}
string result = sb.ToString();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
729 次 |
最近记录: |