2012-05-15 46 views
8

¿Cómo escribir una expresión regular para eliminar espacios en Java?Regex para eliminar espacios

Por ejemplo

Input : "   " 
Output : "" 
--------------------- 
Input : " " 
Output : "" 

Nota que las lengüetas y las nuevas líneas no deben ser eliminados. Solo los espacios deben ser eliminados.

Editar:

¿Cómo podemos hacer un cheque?

Por ejemplo cómo comprobar en un comunicado si que una cadena contiene sólo espacios (cualquier número de ellos)

if(<statement>) 
    { 
       //inside statement 
    } 

Para

input = "     " or input = " " 

el control debe debe ir dentro de si declaración.

+0

he reformulado su pregunta un poco porque "espacios en blanco" * * incluye pestañas y saltos de línea (y formfeeds etc.), por lo que debe utilizar el término "espacio" en su lugar. –

Respuesta

13

El siguiente lo hará:

str = str.replaceAll(" ", ""); 

alternativa:

str = str.replaceAll(" +", ""); 

En mis puntos de referencia, este último fue ~ 40% más rápido que el primero.

+1

+1, aunque técnicamente no es una expresión regular ;-) – ChristopheD

+0

@ChristopheD: Oh sí, es :-) El '" "' es una expresión regular que coincide con un espacio. – NPE

+1

Puede mejorar el rendimiento agregando un '+' después del espacio. –

0

¿Por qué no prueba un simple /[ ]+/? Esto debería ser lo que necesitas.

+0

¿No captura pestañas '\ s' también? La pregunta no quiere que se eliminen las pestañas. – Vikas

+0

sí, eso fue tonto de mi parte. Usar una clase de personaje es probablemente más apropiado aquí. – javex

+0

Al menos debe usar '+' como cuantificador (de lo contrario, hará una operación "sustituir nada sin nada" en cada ubicación entre dos caracteres que no sean espacios en toda la cadena). Además, suelte los corchetes, es solo un carácter, por lo que no necesita una clase de caracteres (aunque podría argumentarse que ayuda a la legibilidad, y el motor de expresiones regulares de Java será lo suficientemente inteligente como para optimizarlo). –

1

se puede hacer -

str = str.replace(" ", ""); 
str = str.replaceAll(" +", ""); 

Si marca definición de replace y replaceAll método -

public String replace(CharSequence target, CharSequence replacement) { 
     return Pattern.compile(target.toString(), Pattern.LITERAL).matcher(
      this).replaceAll(Matcher.quoteReplacement(replacement.toString())); 
    } 

public String replaceAll(String regex, String replacement) { 
    return Pattern.compile(regex).matcher(this).replaceAll(replacement); 
} 

A menos que realmente necesita para reemplazar una expresión regular, replaceAll definitivamente no es nuestra elección. Incluso si el rendimiento es aceptable, la cantidad de objetos creados afectará el rendimiento.

No

muy diferente de la replaceAll(), excepto que el tiempo de compilación de la expresión regular (y muy probablemente el tiempo de ejecución de la matcher) será un poco más corto cuando en el caso de replaceAll(). Es mejor usar el método replace en lugar de replaceAll.

en tiempo real la comparación

File size -> 6458400 
replaceAll -> 94 millisecond 
replace -> 78 millisecond 
+0

¿Puede temporizar y comparar 'str.replace (" "," ");' versus 'str.replaceAll (" + "," ");'? Eso puede ser interesante. –

+0

@TimPietzcker - amablemente verifique el resultado de la prueba. –

5
String str = "  "; 
str = str.replaceAll("\\s+",""); 
Cuestiones relacionadas