2009-02-22 26 views
11

No tengo tiempo para entender la expresión regular y necesito una respuesta rápida. La plataforma es Java.Java Regex - reducir espacios en una cadena

necesito la cadena

"Some text with spaces" 

... que ser convertido a

"Some text with spaces" 

es decir, 2 o más espacios consecutivos a cambiarse a 1 espacio.

+0

¿Quiere decir SÓLO espacios, o quiere decir "cualquier carrera de caracteres espaciales consecutivos" (que podría incluir pestañas, etc.)? –

Respuesta

47
String a = "Some text with spaces"; 
String b = a.replaceAll("\\s+", " "); 
assert b.equals("Some text with spaces"); 
+1

Esto hará que los reemplazos de todos los espacios individuales con un solo espacio, no sean muy eficientes. Solo debe reemplazar si hay dos o más consecutivamente. –

+4

@Chris - no empiece a optimizar la expresión regular prematuramente, creo que esto será suficiente. –

+5

Sí, esta solución no es tan eficiente como podría ser, pero eso solo importaría si esta operación tuviera lugar dentro de un hotspot de rendimiento. Definitivamente no vale la pena un voto negativo. –

11

Si estamos hablando específicamente acerca de los espacios, que desea estar poniendo a prueba específicamente para espacios:

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

Usando \s se traducirá en todos los espacios siendo reemplazados - a veces deseada, othertimes no.

Además, una manera más simple solamente para que coincida con 2 o más es:

MyString = MyString.replaceAll(" {2,}", " "); 

(. Por supuesto, ambos de estos ejemplos puede utilizar \s si se desea cualquier espacio en blanco para ser reemplazado con un solo espacio)

+0

Vale la pena recordar que necesita algo como myString = myString.replaceAll ("+", ""); de lo contrario, no hará nada útil. –

+0

De hecho, creo que simplemente copié el formato de una respuesta (ahora eliminada), pero la corregiré. –

1

para Java (no javascript, php no, no anyother):

txt.replaceAll("\\p{javaSpaceChar}{2,}"," ") 
-1

Es necesario utilizar una constante de java.util.regex.Pattern para evitar vuelve a compilar la expresión cada vez que:

private static final Pattern REGEX_PATTERN = 
     Pattern.compile(" {2,}"); 

public static void main(String[] args) { 
    String input = "Some text with spaces"; 
    System.out.println(
     REGEX_PATTERN.matcher(input).replaceFirst(" ") 
    ); // prints "Some text with spaces" 
} 

En otras palabras, el Apache Commons Lang incluyen en la clase StringUtils el método normalizeSpace.

Cuestiones relacionadas