2012-02-04 40 views

Respuesta

12
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 _.

+0

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

0

Usar este código:

String s = "Test[]" 
s = s.replaceAll("["); 
s = s.replaceAll("]"); 
+2

Lo haría desea mantener los paréntesis ... –

0

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 (\\[\\]\\(\\)])

+0

Usar '\ w' no sirve, ya que incluye es el carácter '_' - un carácter inválido según la pregunta. –

+0

tal vez solo se olvidó de subrayado? – shift66

+0

@ ÓscarLópez - no en mi Java y locale no. –

3

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[]()".

+3

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

+0

, solo como un FYI, no tienes que escapar del paréntesis. –

+0

@BrianRoach Gracias, lo arreglaron. –

8

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); 
+5

No es necesario ser cortante. Es una biblioteca de Java, nada más, y una práctica en eso. –

+0

Así no es como usas CharMatcher.or(), solo toma un argumento – Stephan

0

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; 
    } 
Cuestiones relacionadas