¿Cómo puedo eliminar caracteres de una cadena? Por ejemplo: "My name @is ,Wan.;'; Wan"
.
Me gustaría eliminar los caracteres '@', ',', '.', ';', '\''
de esa cadena para que se convierta"My name is Wan Wan"
var str = "My name @is ,Wan.;'; Wan";
var charsToRemove = new string[] { "@", ",", ".", ";", "'" };
foreach (var c in charsToRemove)
{
str = str.Replace(c, string.Empty);
}
Pero puedo sugerir otro enfoque si desea eliminar todos los caracteres que no sean letras
var str = "My name @is ,Wan.;'; Wan";
str = new string((from c in str
where char.IsWhiteSpace(c) || char.IsLetterOrDigit(c)
select c
).ToArray());
Sencillo:
fuente
Suena como una aplicación ideal para RegEx, un motor diseñado para la manipulación rápida de texto. En este caso:
fuente
Menos específico a su pregunta, es posible eliminar TODOS los signos de puntuación de una cadena (excepto el espacio) haciendo una lista blanca de los caracteres aceptables en una expresión regular:
Tenga en cuenta que hay un espacio después de ese 9 para no eliminar espacios de su oración. El tercer argumento es una cadena vacía que sirve para reemplazar cualquier subcadena que no pertenece a la expresión regular.
fuente
Comparar varias sugerencias (así como comparar en el contexto de reemplazos de un solo carácter con varios tamaños y posiciones del objetivo).
En este caso particular, dividir en los objetivos y unir en los reemplazos (en este caso, cadena vacía) es el más rápido por al menos un factor de 3. Finalmente, el rendimiento es diferente dependiendo del número de reemplazos, donde están los reemplazos la fuente y el tamaño de la fuente. #ymmv
Resultados
(resultados completos aquí )
Arnés de prueba (LinqPad)
(nota: la
Perf
yVs
son extensiones de tiempo escribí )fuente
fuente
La forma más sencilla sería usar
String.Replace
:fuente
Otra solución simple:
fuente
fuente
Una cadena es solo una matriz de caracteres, así que use Linq para hacer el reemplazo (similar a Albin anterior, excepto que usa una instrucción linq contiene para hacer el reemplazo):
La primera cadena es la cadena para reemplazar los caracteres y la segunda es una cadena simple que contiene los caracteres
fuente
Bien podría tirar esto aquí.
Haga una extensión para eliminar caracteres de una cadena:
Y se puede usar así:
O simplemente así:
fuente
Parece que la forma más corta es combinar LINQ y
string.Concat
:Vea la demostración de C # . Tenga en cuenta que
string.Concat
es un acceso directo astring.Join("", ...)
.Tenga en cuenta que aún es posible construir dinámicamente el uso de una expresión regular para eliminar caracteres conocidos individuales, aunque se cree que la expresión regular es más lenta. Sin embargo, aquí hay una manera de construir una expresión regular tan dinámica (donde todo lo que necesita es una clase de caracteres):
Ver otra demostración de C # . La expresión regular se verá así
[@,\.;']+
(una coincidencia o más (+
) apariciones consecutivas de@
,,
,.
,;
o'
caracteres) donde el punto no tiene que ser escapado, peroRegex.Escape
será necesario para escapar de otros caracteres que deben ser escaparon, como\
,^
,]
o-
cuya posición dentro de la clase de personaje que no puedes predecir.fuente
Aquí hay un método que escribí que tiene un enfoque ligeramente diferente. En lugar de especificar los caracteres a eliminar, le digo a mi método qué caracteres quiero conservar: eliminará todos los demás caracteres.
En el ejemplo del OP, solo quiere mantener caracteres alfabéticos y espacios. Así es como se vería una llamada a mi método ( demo de C # ):
Aquí está mi método:
fuente
Muchas buenas respuestas aquí, aquí está mi adición junto con varias pruebas unitarias que pueden usarse para ayudar a probar la corrección, mi solución es similar a la de @ Rianne anterior pero usa un ISet para proporcionar tiempo de búsqueda O (1) en los caracteres de reemplazo (y también similar a la solución Linq de @Albin Sunnanbo).
Pruebas de NUnit (2.6+) aquí
fuente
Es un método poderoso que suelo usar en el mismo caso:
Disfrutar...
fuente
Old School en el lugar copiar / pisar:
No estoy seguro acerca de la eficiencia con otros métodos (es decir, la sobrecarga de todas las llamadas a funciones y las instancias que ocurren como un efecto secundario en la ejecución de C #).
fuente
Lo hago método de extensión y con la matriz de cadenas, creo que
string[]
es más útil quechar[]
porque char también puede ser una cadena:entonces puedes usarlo en cualquier lugar:
fuente
Necesitaba eliminar caracteres especiales de un archivo XML. Así es como lo hice. char.ToString () es el héroe en este código.
fuente
fuente
Tomando las cifras de rendimiento de @drzaus, aquí hay un método de extensión que utiliza el algoritmo más rápido.
Uso
fuente