¿Hay una mejor manera de reemplazar cadenas?
Me sorprende que Reemplazar no tome una matriz de caracteres o una matriz de cadenas. Supongo que podría escribir mi propia extensión, pero tenía curiosidad por saber si hay una mejor forma de hacer lo siguiente. Observe que el último reemplazo es una cadena, no un carácter.
myString.Replace(';', '\n').Replace(',', '\n').Replace('\r', '\n').Replace('\t', '\n').Replace(' ', '\n').Replace("\n\n", "\n");
\t
y\r
están incluidos en\s
. Entonces tu expresión regular es equivalente a[;,\s]
.\s
realidad es equivalente a,[ \f\n\r\t\v]
por lo que incluye algunas cosas que no estaban en la pregunta original. Además, la pregunta original pregunta porReplace("\n\n", "\n")
qué su expresión regular no maneja.Si te sientes particularmente inteligente y no quieres usar Regex:
También podría envolver esto en un método de extensión con poco esfuerzo.
Editar: O simplemente espera 2 minutos y terminaré escribiéndolo de todos modos :)
Y voilá...
fuente
Regex.Replace
es más de 8 veces más lento que variasstring.Replace
llamadas seguidas. y 4 veces más lento queSplit
+Join
. Ver gist.github.com/MarcinJuraszek/c1437d925548561ba210a1c6ed144452Puede usar la función Agregado de Linq:
Aquí está el método de extensión:
Ejemplo de uso del método de extensión:
fuente
Este es el camino más corto:
fuente
Ohhh, el horror de rendimiento! La respuesta está un poco desactualizada, pero aún así ...
fuente
Las cadenas son simplemente matrices de caracteres inmutables
Solo necesitas hacerlo mutable:
StringBuilder
unsafe
mundo y jugar con punteros (aunque peligroso)e intente iterar a través de la matriz de caracteres la menor cantidad de veces. Tenga en cuenta el
HashSet
aquí, ya que evita atravesar la secuencia de caracteres dentro del bucle. Si necesita una búsqueda aún más rápida, puede reemplazarlaHashSet
por una búsqueda optimizada parachar
(basada en unarray[256]
).Ejemplo con StringBuilder
Editar - Versión optimizada
Entonces solo lo usas así:
fuente
wchar_t
en .net, está reemplazando solo un subconjunto de todos los caracteres posibles (y necesitará 65536 bools para optimizar eso ...)También puede simplemente escribir estos métodos de extensión de cadena y colocarlos en algún lugar de su solución:
Llámalos así:
Y esto:
fuente
Use RegEx.Replace, algo como esto:
Aquí hay más información sobre esta documentación de MSDN para RegEx.
fuente
Rendimiento sabio, probablemente esta no sea la mejor solución, pero funciona.
fuente
fuente