मुझे आश्चर्य हुआ कि स्ट्रिंग वर्णों को प्रतिस्थापित करने का सबसे आसान तरीका क्या है जिसे बाद में बदला जाना चाहिए।खराब वर्णों के साथ स्ट्रिंग के खराब वर्णों को प्रतिस्थापित करना
उदाहरण के लिए:
var str = "[Hello World]";
//enclose all occurences of [ and ] with brackets[]
str = str.Replace("[","[[]").Replace("]","[]]");
- वांछित परिणाम:
[[]Hello World[]]
- वास्तविक परिणाम:
[[[]]Hello World[]]
कारण स्पष्ट रूप से है दूसरे को पहले से ही संशोधित स्ट्रिंग पर बदलें।
तो "खराब" वर्णों वाले वर्णों के साथ "खराब" वर्णों के सभी अवसरों को कैसे प्रतिस्थापित करें?
सभी तरीकों में से एक त्वरित माप से पता चला कि StringBuilder लिए सबसे कारगर तरीका है।
190kb फ़ाइल (मिलीसेकेंड में सभी)
regexTime 40.5065 replaceTime 20.8891 stringBuilderTime 6.9776
7MB फ़ाइल
regexTime 1209.3529 replaceTime 403.3985 stringBuilderTime 175.2583
वैसे, जॉन गया था से सीधे StringBuilder
दृष्टिकोण दो बार के रूपके रूप में तेज़से से दृष्टिकोण।
मैं इसे से बाहर एक विस्तार कर दिया है:
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 अच्छी तरह से मापा गया, टिम करने के लिए एक सहायक कार्य किया। –