Mi sono chiesto quale sia il modo più semplice per sostituire una stringa di caratteri che deve essere sostituita successivamente.Sostituzione di caratteri errati di una stringa con caratteri non validi
Ad esempio:
var str = "[Hello World]";
//enclose all occurences of [ and ] with brackets[]
str = str.Replace("[","[[]").Replace("]","[]]");
- Il risultato desiderato:
[[]Hello World[]]
- Il risultato effettivo:
[[[]]Hello World[]]
La ragione è ovviamente la seconda sostituire sulla corda già modificato.
Quindi, come sostituire tutte le occorrenze di caratteri "cattivi" con caratteri che contengono caratteri "cattivi"?
Una misura rapida di tutti gli approcci ha rivelato che il StringBuilder è il modo più efficiente.
file di 190KB (tutti in millisecondi)
regexTime 40.5065 replaceTime 20.8891 stringBuilderTime 6.9776
file di 7MB
regexTime 1209.3529 replaceTime 403.3985 stringBuilderTime 175.2583
Tra l'altro, la diretta StringBuilder
approccio da John è stato due volte più veloce come loApproccioda Sehe.
Ho fatto un'estensione fuori di esso:
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 Ben misurato, Tim. –