Daha sonra değiştirilmesi gereken bir dize karakterleri değiştirmenin en kolay yolunun ne olduğunu merak ettim. ÖrneğinBir String'in bozuk karakterlerini kötü karakterlerle değiştirme
:
var str = "[Hello World]";
//enclose all occurences of [ and ] with brackets[]
str = str.Replace("[","[[]").Replace("]","[]]");
- istenen sonucu:
[[]Hello World[]]
- gerçek sonuç:
[[[]]Hello World[]]
nedeni ikinci zaten değiştirilmiş dizesi yerine besbelli.
"Kötü" karakterlerin tüm oluşumları "kötü" karakterler içeren karakterlerle nasıl değiştirilir? tüm yaklaşımların
Hızlı bir ölçüm StringBuilder en etkili yoludur ortaya çıkarmıştır.
regexTime 40.5065 replaceTime 20.8891 stringBuilderTime 6.9776
7MB dosyasında (bütün milisaniye cinsinden)
190KB dosya
aradaregexTime 1209.3529 replaceTime 403.3985 stringBuilderTime 175.2583
, John edildi doğrudan StringBuilder
yaklaşım iki katkadar hızlı, Sehe numaralı telefondan yaklaşmaktadır.
ben bunun dışında bir uzantısı yaptık:
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[]{'[', ']'},"[","]");
+1 Güzel bir şekilde ölçülmüş, Tim. –