Tôi chỉ tự hỏi cách dễ nhất để thay thế một chuỗi ký tự phải được thay thế sau đó là gì.Thay thế các ký tự không hợp lệ của một chuỗi có ký tự không hợp lệ
Ví dụ:
var str = "[Hello World]";
//enclose all occurences of [ and ] with brackets[]
str = str.Replace("[","[[]").Replace("]","[]]");
- Kết quả mong muốn:
[[]Hello World[]]
- Kết quả thực tế:
[[[]]Hello World[]]
Lý do là rõ ràng là thay thế thứ hai trên chuỗi đã sửa đổi.
Vậy làm cách nào để thay thế tất cả các lần xuất hiện của các ký tự "xấu" có các ký tự chứa ký tự "xấu"?
Đo nhanh tất cả các phương pháp đã cho thấy rằng StringBuilder là cách hiệu quả nhất.
tập 190kb (tất cả trong mili giây)
regexTime 40.5065 replaceTime 20.8891 stringBuilderTime 6.9776
tập tin 7MB
regexTime 1209.3529 replaceTime 403.3985 stringBuilderTime 175.2583
Bằng cách này, các StringBuilder
cách tiếp cận trực tiếp từ John được gấp đôi nhanh nhưCách tiếp cậntừ Sehe.
Tôi đã thực hiện một phần mở rộng ra khỏi nó:
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 Được đo độc đáo, Tim. –