¿Cómo eliminar caracteres especiales de una cadena?

Quiero eliminar caracteres especiales como:

- + ^ . : , 

desde una cadena usando Java.

Eso depende de lo que defina como caracteres especiales, pero intente replaceAll(...) :

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

Tenga en cuenta que el carácter ^ no debe ser el primero en la lista, ya que entonces tendría que escapar de él o significaría “cualquiera menos estos caracteres”.

Otra nota: el personaje debe ser el primero o el último de la lista; de lo contrario, tendría que escapar o definiría un rango (por ejemplo :-, significaría “todos los caracteres en el rango : a , ).

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 las expresiones regulares (la siguiente lista no está completa, así que tenga en cuenta otros caracteres como ( , { , $ etc.):

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

Si quieres deshacerte de todos los signos de puntuación y símbolos, prueba esta expresión regular: \p{P}\p{S} (ten en cuenta que en las cadenas de Java deberías escapar de las barras diagonales inversas: "\\p{P}\\p{S}" ).

Una tercera forma podría ser algo como esto, si puedes definir exactamente lo que debe quedar en tu cadena:

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

Esto significa: reemplazar todo lo que no sea 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 una alternativa menos restrictiva al enfoque de “definir los caracteres permitidos”, como lo sugiere Ray:

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

La expresión regular coincide con todo lo que no es una letra en ningún idioma y no un separador (espacios en blanco, linebreak, 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 de codificarlos (como un único punto de código o una combinación de puntos de código). Por favor, consulte regular-expressions.info para más información.

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

Los patrones son expresiones regulares comstackdas. 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 comstackrla una vez y volver a utilizarla. eso. 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("[^az AZ]"); Matcher matcher = pattern.matcher(s); String number = matcher.replaceAll(""); return number; } } 

Resultado

 String is = one Number is = 9196390097 

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

Por cierto, 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("[-+^]*", ""); 

¡Debería eliminar todos los caracteres {‘^’, ‘+’, ‘-‘} que quisiera eliminar!

Esto reemplazará todos los caracteres, excepto los alfanuméricos

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

Use el método String.replaceAll() en Java. replaceAll debe ser lo suficientemente bueno para su problema.

Para eliminar el carácter Specail

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

La salida será: abdd.

Esto funciona perfectamente

Puede eliminar solo char de la siguiente manera:

 String str="+919595354336"; String result = str.replaceAll("\\\\+",""); System.out.println(result); 

SALIDA:

 919595354336 

Si solo quieres hacer un reemplazo literal en java, usa Pattern.quote(string) para escapar de cualquier cadena a un literal.

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