Me pregunto cuál es la forma más fácil de reemplazar una cadena de caracteres que debe reemplazarse posteriormente.Reemplazar los caracteres incorrectos de una Cadena con caracteres incorrectos
Por ejemplo:
var str = "[Hello World]";
//enclose all occurences of [ and ] with brackets[]
str = str.Replace("[","[[]").Replace("]","[]]");
- El resultado deseado:
[[]Hello World[]]
- El resultado real:
[[[]]Hello World[]]
La razón es, obviamente, la segunda reemplazar en la cuerda ya modificado.
Entonces, ¿cómo reemplazar todas las apariciones de caracteres "malos" con caracteres que contienen caracteres "malos"?
una medición rápida de todos los enfoques reveló que el StringBuilder es la forma más eficiente.
archivo de 190kb (todo en milisegundos)
regexTime 40.5065 replaceTime 20.8891 stringBuilderTime 6.9776
archivo 7 MB
regexTime 1209.3529 replaceTime 403.3985 stringBuilderTime 175.2583
Por cierto, el StringBuilder
enfoque directo de John fue dos veces rápido como el Aggregate enfoque de Sehe.
que he hecho una extensión de ella:
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 Bien medido, Tim. –