Quiero eliminar caracteres especiales como:
- + ^ . : ,
desde un String usando Java.
Quiero eliminar caracteres especiales como:
- + ^ . : ,
desde un String usando Java.
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.
[\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% correcto
String 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]","");
Como se describe aquí http://developer.android.com/reference/java/util/regex/Pattern.html
Los patrones son expresiones regulares compiladas. En muchos casos, los métodos de conveniencia como
String.matches
,String.replaceAll
yString.split
será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.
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
Prueba el replaceAll()
método de la String
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!
Para quitar carácter especial
String t2 = "!@#$%^&*()-';,./?><+abdd";
t2 = t2.replaceAll("\\W+","");
La salida será: abdd.
Esto funciona perfectamente.
Utilice el String.replaceAll()
método en Java.
replaceAll debería ser lo suficientemente bueno para su problema.
String
clase? En particular, busque la palabra 'regex'; hay algunos métodos, y un poco de pensamiento debería decirle cómo proceder ... :)