Aparentemente, ya sabe qué es una expresión regular en función de cómo ha etiquetado su pregunta. ¿Intentaste leer la documentación de la Stringclase? En particular, busque la palabra 'regex'; hay algunos métodos, y un poco de pensamiento debería decirle cómo proceder ... :)
Karl Knechtel
3
La frase "carácter especial" está tan sobreutilizada que casi no tiene sentido. Si lo que quiere decir es "Tengo esta lista de caracteres específicos que quiero eliminar", haga lo que sugiere Thomas y forme su patrón con una clase de caracteres regex y replaceAllelimínelos. Si tiene requisitos más esotéricos, edite la pregunta. :)
Ray Toal
1
esos no son caracteres especiales ... estos son: äâêíìéè ya que no son sus tipos de caracteres comunes de 1 byte como - + ^ son ... de todos modos, como dijo Ray, haga una replaceAllpara ellos, o haga un análisis en la cadena, agregue los caracteres que no son los caracteres que desea sacar a otra cadena y, al final, simplemente haga un + = en una cadena que devolverá.
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 excepto estos caracteres".
Otra nota: el -carácter debe ser el primero o el último en la lista, de lo contrario tendría que escapar de él o definiría un rango (por ejemplo :-,, significaría "todos los caracteres en el rango :hasta ,).
Por lo tanto, con el fin de mantener la coherencia y no depender de posicionamiento carácter, es posible que desee escapar de todos los caracteres que tienen un significado especial en las expresiones regulares (la siguiente lista no es completa, por lo que estar al tanto de otros personajes como (, {, $ etc.) :
String result = yourString.replaceAll("[\\-\\+\\.\\^:,]","");
Si desea deshacerse de todos los signos de puntuación y símbolos, pruebe esta expresión regular: \p{P}\p{S}(tenga en cuenta que en las cadenas de Java tendrá que escapar de las barras diagonales inversas :) "\\p{P}\\p{S}".
Una tercera forma podría ser algo como esto, si puede definir exactamente lo que debe quedar en su cadena:
String result = yourString.replaceAll("[^\\w\\s]","");
Esto significa: reemplace 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 resultar ú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 caracteres permitidos", como lo sugiere Ray:
String result = yourString.replaceAll("[^\\p{L}\\p{Z}]","");
La expresión regular coincide con todo lo que no sea una letra en ningún idioma y no un separador (espacios en blanco, salto de línea, etc.). Tenga en cuenta que no puede usar [\P{L}\P{Z}](la P mayúscula significa no tener esa propiedad), ya que eso significaría "todo lo que no sea una letra o un 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). Consulte regular-expressions.info para obtener más información.
+1 para la mejor solución de uso general. Dado que está enumerando un par de variaciones en ausencia de detalles del OP, también podría mostrar y explicar patrones como[\P{L}]
Ray Toal,
También tenga en cuenta que el -personaje debe ser el primero o el último en la lista o debe ser escapado.
kapex
[^\\p{L}\\p{Z}]parece eliminar las diéresis alemanas (ä, ö, ü) también (al menos lo hace para mí: /), por lo que "La expresión regular coincide con todo lo que no sea una letra en ningún idioma" no parece ser 100% correcto
Peter
@Peter no elimina esos personajes en mis pruebas. Puede haber otro problema en su caso, por ejemplo, una codificación diferente del texto. Agregaré un enlace para obtener más información.
Thomas
1
@Thomas String result = yourString.replaceAll("[^\w\s]","");comete un errorInvalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ )
Visruth
40
Esto reemplazará todos los caracteres excepto los alfanuméricos
Los patrones son expresiones regulares compiladas. En muchos casos, los métodos de conveniencia como String.matches, String.replaceAlly String.splitserán preferibles, pero si necesita hacer mucho trabajo con la misma expresión regular, puede ser más eficiente compilarlo una vez y reutilizarlo. La clase Pattern y su compañera, Matcher, también ofrecen más funcionalidad que la pequeña cantidad expuesta por String.
String
clase? En particular, busque la palabra 'regex'; hay algunos métodos, y un poco de pensamiento debería decirle cómo proceder ... :)replaceAll
elimínelos. Si tiene requisitos más esotéricos, edite la pregunta. :)replaceAll
para ellos, o haga un análisis en la cadena, agregue los caracteres que no son los caracteres que desea sacar a otra cadena y, al final, simplemente haga un + = en una cadena que devolverá.deleteChars.apply( fromString, "-+^.:," );
- busque deleteChars aquíRespuestas:
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 excepto estos caracteres".Otra nota: el
-
carácter debe ser el primero o el último en la lista, de lo contrario tendría que escapar de él o definiría un rango (por ejemplo:-,
, significaría "todos los caracteres en el rango:
hasta,
).Por lo tanto, con el fin de mantener la coherencia y no depender de posicionamiento carácter, es posible que desee escapar de todos los caracteres que tienen un significado especial en las expresiones regulares (la siguiente lista no es completa, por lo que estar al tanto de otros personajes como
(
,{
,$
etc.) :String result = yourString.replaceAll("[\\-\\+\\.\\^:,]","");
Si desea deshacerse de todos los signos de puntuación y símbolos, pruebe esta expresión regular:
\p{P}\p{S}
(tenga en cuenta que en las cadenas de Java tendrá que escapar de las barras diagonales inversas :)"\\p{P}\\p{S}"
.Una tercera forma podría ser algo como esto, si puede definir exactamente lo que debe quedar en su cadena:
String result = yourString.replaceAll("[^\\w\\s]","");
Esto significa: reemplace 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 resultar ú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 caracteres permitidos", como lo sugiere Ray:
String result = yourString.replaceAll("[^\\p{L}\\p{Z}]","");
La expresión regular coincide con todo lo que no sea una letra en ningún idioma y no un separador (espacios en blanco, salto de línea, etc.). Tenga en cuenta que no puede usar
[\P{L}\P{Z}]
(la P mayúscula significa no tener esa propiedad), ya que eso significaría "todo lo que no sea una letra o un 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). Consulte regular-expressions.info para obtener más información.
fuente
[\P{L}]
-
personaje debe ser el primero o el último en la lista o debe ser escapado.[^\\p{L}\\p{Z}]
parece eliminar las diéresis alemanas (ä, ö, ü) también (al menos lo hace para mí: /), por lo que "La expresión regular coincide con todo lo que no sea una letra en ningún idioma" no parece ser 100% correctoString result = yourString.replaceAll("[^\w\s]","");
comete un errorInvalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ )
Esto reemplazará todos los caracteres excepto los alfanuméricos
replaceAll("[^A-Za-z0-9]","");
fuente
Como se describe aquí http://developer.android.com/reference/java/util/regex/Pattern.html
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
fuente
Prueba el
replaceAll()
método de laString
clase.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 deseaba eliminar!
fuente
Para quitar carácter especial
String t2 = "!@#$%^&*()-';,./?><+abdd"; t2 = t2.replaceAll("\\W+","");
La salida será:
abdd.
Esto funciona perfectamente.
fuente
Utilice el
String.replaceAll()
método en Java. replaceAll debería ser lo suficientemente bueno para su problema.fuente
Puede eliminar un solo carácter de la siguiente manera:
String str="+919595354336"; String result = str.replaceAll("\\\\+",""); System.out.println(result);
SALIDA:
919595354336
fuente
Si solo desea hacer un reemplazo literal en Java, use
Pattern.quote(string)
para escapar cualquier cadena a un literal.fuente