2011-09-26 38 views
66

Quiero eliminar caracteres especiales como:¿Cómo eliminar caracteres especiales de una cadena?

- +^. : , 

de una cadena usando Java.

+0

Evidentemente, usted ya sabe lo que es una expresión regular se basa en la forma en que lo ha insertado en cuestión. ¿Intentó leer la documentación de la clase 'String'? En particular, busque la palabra 'regex'; hay algunos métodos, y un poco de pensamiento debería indicarle cómo proceder ... :) –

+2

La frase "carácter especial" está tan sobreutilizada que casi no tiene sentido. Si lo que quieres decir es "Tengo esta lista de caracteres ** específicos" que quiero eliminar, "haz lo que Thomas sugiera y forme tu patrón con una clase de caracteres regex y 'replaceAll'. Si tiene más requisitos esotéricos, edite la pregunta. :) –

+1

esos no son caracteres especiales ... estos son: äâêíìéè ya que no son los tipos de caracteres de 1 byte comunes como - +^son ... de todos modos, como dijo Ray, o bien hacen un 'replaceAll' para ellos, o, hacen un análisis en la cadena, agregue los caracteres que no son los caracteres que desea extraer a otra cadena y al final simplemente haga un + = a una cadena que va a devolver. –

Respuesta

203

Eso depende de lo que usted define como caracteres especiales, pero trate replaceAll(...):

String result = yourString.replaceAll("[-+.^:,]",""); 

Tenga en cuenta que el carácter ^ no debe ser el primero en la lista, ya que le entonces o bien tiene que escapar de ella o significaría "cualquiera menos estos personajes".

Otra nota: el carácter - tiene que ser el primero o el último en la lista, de lo contrario tendría que escapar de ella o sería definir un rango (por ejemplo :-, significaría "todos los caracteres en el rango :-,)

Por lo tanto, para mantener la coherencia y no depender del posicionamiento del personaje, es posible que desee escapar de todos los caracteres que tienen un significado especial en expresiones regulares (la siguiente lista no está completa, así que tenga en cuenta otros caracteres como (, {, $ etc.):

String result = yourString.replaceAll("[\\-\\+\\.\\^:,]",""); 


Si desea deshacerse de todos puntuacion y símbolos, prueba esta expresión regular: \p{P}\p{S} (tener en cuenta que en las cadenas de Java que lo tienes que escapar de las barras inclinadas invertidas: "\\p{P}\\p{S}").

Una tercera vía podría ser algo como esto, si se puede definir exactamente lo que se debe dejar en su cadena:

String result = yourString.replaceAll("[^\\w\\s]",""); 

Esto significa: sustituir todo lo que no es un carácter de palabra (az, en cualquier caso, 0-9 o _) o espacios en blanco.

Editar: tenga en cuenta que hay un par de otros patrones que pueden ser útiles. Sin embargo, no puedo explicarlos todos, así que eche un vistazo a la sección de referencia de regular-expressions.info.

Aquí hay alternativa menos restrictiva para el enfoque de "definir caracteres permitidos", como se sugiere por Ray:

String result = yourString.replaceAll("[^\\p{L}\\p{Z}]",""); 

La expresión coincide con todo lo que no es una carta en cualquier idioma y no un separador (espacio en blanco, salto de línea, etc. .). Tenga en cuenta que no puede usar [\P{L}\P{Z}] (mayúscula P significa no tener esa propiedad), ya que eso significaría "todo lo que no es una letra o no espacio en blanco", que casi coincide con todo, ya que las letras no son espacios en blanco y viceversa.

información adicional sobre Unicode

Algunos caracteres Unicode parecen causar problemas debido a las diferentes formas posibles para codificar ellos (como un único punto de código o una combinación de puntos de código). Consulte regular-expressions.info para obtener más información.

+0

+1 para la mejor solución de propósito general. Como está enumerando un par de variaciones en ausencia de detalles del OP, también podría mostrar y explicar patrones como '[\ P {L}]' –

+0

También tenga en cuenta que el carácter '-' debe ser el primero o el último en la lista o necesita ser escapado. – Kapep

+0

'[^ \\ p {L} \\ p {Z}]' parece eliminar German Umlauts (ä, ö, ü) también (al menos lo hace para mí: /), entonces "The regex coincide con todo eso no es una letra en ningún idioma "no parece 100% correcto – Peter

13

Pruebe el método replaceAll() de la clase String.

BTW aquí está el método, el tipo de retorno y los parámetros.

public String replaceAll(String regex, 
         String replacement) 

Ejemplo:

String str = "Hello +-^ my + - friends^^^-- ^^^ +!"; 
str = str.replaceAll("[-+^]*", ""); 

Debe eliminar todos los { '^', '+', '-'} caracteres que usted quería quitar!

2

Utilice el método String.replaceAll() en Java. replaceAll debería ser lo suficientemente bueno para su problema.

13

Como se ha descrito aquí http://developer.android.com/reference/java/util/regex/Pattern.html

patrones se compilan las expresiones regulares. En muchos casos, serán preferibles los métodos de conveniencia como String.matches, String.replaceAll y String.split, pero si necesita trabajar mucho con la misma expresión regular, puede ser más eficiente compilarla una vez y volver a utilizarla. La clase Pattern y su compañero, Matcher, también ofrecen más funcionalidades que la pequeña cantidad expuesta por String.

public class RegularExpressionTest { 

public static void main(String[] args) { 
    System.out.println("String is = "+getOnlyStrings("!&(*^*(^(+one(&(^()(*)(*&^%$#@!#$%^&*()(")); 
    System.out.println("Number is = "+getOnlyDigits("&(*^*(^(+91-&*9hi-639-0097(&(^(")); 
} 

public static String getOnlyDigits(String s) { 
    Pattern pattern = Pattern.compile("[^0-9]"); 
    Matcher matcher = pattern.matcher(s); 
    String number = matcher.replaceAll(""); 
    return number; 
} 
public static String getOnlyStrings(String s) { 
    Pattern pattern = Pattern.compile("[^a-z A-Z]"); 
    Matcher matcher = pattern.matcher(s); 
    String number = matcher.replaceAll(""); 
    return number; 
} 
} 

Resultado

String is = one 
Number is = 9196390097 
1

Puede eliminar single-char de la siguiente manera:

String str="+919595354336"; 

String result = str.replaceAll("\\\\+",""); 

System.out.println(result); 

SALIDA:

919595354336 
0

Si sólo wa Para hacer un reemplazo literal en java, use Pattern.quote(string) para escapar de cualquier cadena a un literal.

myString.replaceAll(Pattern.quote(matchingStr), replacementStr) 
2

Para Retire carácter Specail

cadena t2 = "@ # $%^& *() - ';!.?, /> < + abdd";

t2 = t2.replaceAll ("\\ W +", "");

La salida será: abdd.

Esto funciona perfectamente.

0

Esto reemplazará todos los caracteres alfanuméricos, excepto

replaceAll("[^A-Za-z0-9]",""); 
Cuestiones relacionadas