2010-11-26 29 views
63

Tengo una cadena con muchos caracteres especiales. Quiero eliminar todo eso, pero mantener los caracteres alfabéticos.Cómo reemplazar caracteres especiales en una cadena?

¿Cómo puedo hacer esto?

+0

Mira este hilo: http://stackoverflow.com/questions/3438854/replace-unicode-control-characters-existing-solution –

Respuesta

146

Eso depende de lo que signifique. Si lo que desea es deshacerse de ellos, hacer esto:
(Actualización: Al parecer desea mantener dígitos, así, utilizar las segundas líneas en este caso)

String alphaOnly = input.replaceAll("[^a-zA-Z]+",""); 
String alphaAndDigits = input.replaceAll("[^a-zA-Z0-9]+",""); 

o el equivalente:

String alphaOnly = input.replaceAll("[^\\p{Alpha}]+",""); 
String alphaAndDigits = input.replaceAll("[^\\p{Alpha}\\p{Digit}]+",""); 

(Todo esto puede ser mejorada significativamente por precompilar el patrón de expresión regular y almacenarla en una constante)

O, con Guava:

private static final CharMatcher ALNUM = 
    CharMatcher.inRange('a', 'z').or(CharMatcher.inRange('A', 'Z')) 
    .or(CharMatcher.inRange('0', '9')).precomputed(); 
// ... 
String alphaAndDigits = ALNUM.retainFrom(input); 

Pero si desea activar los caracteres acentuados en algo sensato que sigue siendo ascii, mirar a estas preguntas:

+0

Gracias Floydit está funcionando bien. Pero hay un problema – Tanu

+0

cuando estoy usando esta función también está eliminando todos los números. Pero no quiero que se eliminen los números. Solo quiero eliminar los caracteres especiales. Sugiere algo ... – Tanu

+0

. Bien, dijiste que solo querías el alfabeto. Pero actualizaré mi respuesta en un minuto –

0

Puede usa expresiones regulares básicas en cadenas para encontrar todos los caracteres especiales o utilice clases de patrón y de emparejador para buscar/modificar/eliminar cadenas definidas por el usuario. Este enlace tiene algunos ejemplos simples y fáciles de entender para expresiones regulares: http://www.vogella.de/articles/JavaRegularExpressions/article.html

55

Estoy usando esto.

s = s.replaceAll("\\W", ""); 

Reemplaza todos los caracteres especiales de la cadena.

Aquí

\ w: Palabras carácter, la abreviatura de [a-zA-Z_0-9]

\ W: Un no-palabra carácter

+4

Esto es bueno pero también elimina espacios –

+3

¿Qué sucede si no quiero eliminar espacio? –

+0

No funciona para . Cómo eliminar '<', '>', '\' caracteres? – Manoj

0

Puede obtener Unicode para esa basura carácter de la herramienta de mapa de caracteres en la PC de la ventana y agregar \ u por ejemplo \ u00a9 para el símbolo de copyright. Ahora puede usar esa cadena con ese carácter de basura en particular, no elimine ningún carácter basura pero reemplácelo con unicode apropiado.

4

Puede usar el siguiente método para mantener caracteres alfanuméricos.

replaceAll("[^a-zA-Z0-9]", ""); 

Y si desea mantener sólo caracteres alfabéticos uso esto

replaceAll("[^a-zA-Z]", ""); 
+0

quita espacios también – Jasper

+0

Para uso espacial 'replaceAll (" [^ a-zA-Z0-9] "," ");' – Qamar

1
string Output = Regex.Replace(Input, @"([ a-zA-Z0-9&, _]|^\s)", ""); 

Aquí todos los caracteres especiales, excepto espacio, coma, y ​​se sustituyen signo. También puede omitir el espacio, la coma y el símbolo por la siguiente expresión regular.

string Output = Regex.Replace(Input, @"([ a-zA-Z0-9_]|^\s)", ""); 

Donde Entrada es la cadena que necesitamos para reemplazar los caracteres.

Cuestiones relacionadas