2011-06-04 28 views

Respuesta

60

probablemente hay una expresión regular más concisa, pero esto sin duda trabajo:

string.replaceAll("[^a-zA-Z0-9]", ""); 
+2

+1 para una respuesta rápida. No era tan rápido escribiendo mi respuesta en el iPhone ;-) –

+8

Puede ser más rápido si permite que coincida con varios caracteres, por lo que string.replaceAll ("[^ a-zA-Z0-9] +", "") . – MRAB

+0

Cadena probada 24 \ 7. Extrañamente regresa 24. ¿Por qué? – sandy

17
string.replaceAll("[^a-zA-Z0-9]+", ""); 
+0

como @MRAB más tarde mencioné que decidí reemplazar varios caracteres a la vez para obtener un mejor rendimiento –

2
String test = "MAX EUK_1334-PP/B+";  
test = test.replaceAll("[\\W_]", ""); 
System.out.println(test + "\n"); 

resultado impreso:

MAXEUK1334PPB 
+0

¿Sabía que '\ W' no coincide con el carácter' '_' 'tampoco? –

+0

Esta expresión regular incluirá los caracteres necesarios * más * el guión bajo. Los corchetes son redundantes, también. – stevevls

+0

Esto da como resultado 'inesperado char: 'W'' y ' Secuencia de escape inválida (los válidos son \ b \ t \ n \ f \ r \ "\' \\)' –

1

Algunos están olvidando el "_" char:

String regex = "[_\\W]";

public class RegexFun2 { 
    public static void main(String[] args) { 
     String test = "MAX EUK_1334-PP/B+"; 

     String regex = "[_\\W]"; 

     String result = test.replaceAll(regex, ""); 
     System.out.println(result); 
    } 
} 

Pero aún así creo que el OP se está engañando a sí mismo al no demostrar que lo intentó primero y publicar su intento en su pregunta original. Solo mis 2 centavos.

0

Se pueden utilizar valores ASCII de los caracteres:

while(!end of string){ 
    if(valueOfChar is between 48-57 or 65-90 or 97-122) 
      write it to your string 
} 

Esto puede ayudar, pero no sé si se supone que escribir el código con replaceAll. Ambos replaceAll y este código funcionan con el mismo rendimiento (O(n)).

Cuestiones relacionadas