No tengo idea de cómo eliminar los caracteres no válidos de una cadena en Java. Estoy tratando de eliminar todos los caracteres que no son números, letras o() []. ¿Cómo puedo hacer esto?¿Cómo eliminar caracteres inválidos de una cadena?
Gracias
No tengo idea de cómo eliminar los caracteres no válidos de una cadena en Java. Estoy tratando de eliminar todos los caracteres que no son números, letras o() []. ¿Cómo puedo hacer esto?¿Cómo eliminar caracteres inválidos de una cadena?
Gracias
String foo = "this is a thing with & in it";
foo = foo.replaceAll("[^A-Za-z0-9()\\[\\]]", "");
Javadocs son de su amigo. Las expresiones regulares también son tu amigo.
Editar:
Siendo siad, esto es sólo para el alfabeto latino; puedes ajustar en consecuencia. \\w
se puede utilizar para a-zA-Z
para denotar un carácter de "palabra" si eso funciona para su caso, aunque incluye _
.
Usar este código:
String s = "Test[]"
s = s.replaceAll("[");
s = s.replaceAll("]");
Lo haría desea mantener los paréntesis ... –
myString.replaceAll("[^\\w\\[\\]\\(\\)]", "");
método replaceAll toma una expresión regular como primer parámetro y sustituye a todos los partidos en la cadena. Esta expresión coincide con todos los caracteres que no sean dígitos, letra o un guión (\\w
) y los apoyos que necesita (\\[\\]\\(\\)]
)
Usar '\ w' no sirve, ya que incluye es el carácter '_' - un carácter inválido según la pregunta. –
tal vez solo se olvidó de subrayado? – shift66
@ ÓscarLópez - no en mi Java y locale no. –
Prueba esto:
String s = "123abc&^%[]()";
s = s.replaceAll("[^A-Za-z0-9()\\[\\]]", "");
System.out.println(s);
Lo anterior quitar caracteres "&^%"
en la cadena de muestra, dejando en s
solo "123abc[]()"
.
Depende de tu definición de" números "," letras ", etc. Ciertamente no esperaría que 'Straße' se cambiara a' Strae'. Demonios, diría que es una solución bastante ingenua, lo siento, solo;) – Voo
, solo como un FYI, no tienes que escapar del paréntesis. –
@BrianRoach Gracias, lo arreglaron. –
Usando Guava, y casi con seguridad más eficiente (y más legible) de expresiones regulares:
CharMatcher desired = CharMatcher.JAVA_DIGIT
.or(CharMatcher.JAVA_LETTER)
.or(CharMatcher.anyOf("()[]"))
.precomputed(); // optional, may improve performance, YMMV
return desired.retainFrom(string);
No es necesario ser cortante. Es una biblioteca de Java, nada más, y una práctica en eso. –
Así no es como usas CharMatcher.or(), solo toma un argumento – Stephan
Puede eliminar especiales caracteres de la cadena/URL o cualquier parámetros de la petición que tiene ir del lado del usuario
public static String removeSpecialCharacters(String inputString){
final String[] metaCharacters = {"../","\\..","\\~","~/","~"};
String outputString="";
for (int i = 0 ; i < metaCharacters.length ; i++){
if(inputString.contains(metaCharacters[i])){
outputString = inputString.replace(metaCharacters[i],"");
inputString = outputString;
}else{
outputString = inputString;
}
}
return outputString;
}
La referencia primaria de expresiones regulares de Java: [java.util.regex.Pattern] (https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html) – etech