Cómo dividir una cadena con cualquier espacio en blanco como delimitadores

555

¿Qué patrón de expresión que me necesita para pasar a java.lang.String.split() dividir una cadena en una matriz de subcadenas utilizando todos los caracteres de espacio en blanco ( ' ', '\t', '\n', etc.) como delimitadores?

mcjabberz
fuente

Respuestas:

955

Algo en la linea de

myString.split("\\s+");

Esto agrupa todos los espacios en blanco como delimitador.

Entonces, si tengo la cadena:

"Hello[space][tab]World"

Esto debería producir las cadenas "Hello"y "World"omitir el espacio vacío entre el [space]y el [tab].

Como señaló VonC, la barra diagonal inversa debe escaparse, porque Java primero intentaría escapar de la cadena a un carácter especial y enviarlo para que se analice. Lo que quieres es el literal "\s", lo que significa que debes pasar "\\s". Puede ser un poco confuso.

El \\ses equivalente a [ \\t\\n\\x0B\\f\\r].

Henrik Paul
fuente
1
Gracias por el recordatorio. Estaba codificando desde la cadera :)
Henrik Paul
34
Tenga en cuenta que trim()primero debe: trim().split("\\s++")- de lo contrario, por ejemplo, dividir `abc` emitirá dos cadenas vacías primero.
Marcus Junius Brutus
¿Por qué usaste cuatro barras invertidas cerca del final de tu respuesta? es decir. "\\\\s"?
Michael Borkowski
"" .trim (). split ("\\ s +") - la división de cadena vacía le da una longitud de 1. "term" .trim (). split ("\\ s +") - también le da una longitud de 1 .
PaulSchell
88

En la mayoría de los dialectos de expresiones regulares hay un conjunto de resúmenes de caracteres convenientes que puede usar para este tipo de cosas; estos son buenos para recordar:

\w - Coincide con cualquier carácter de palabra.

\W - Coincide con cualquier carácter no verbal.

\s - Coincide con cualquier personaje de espacio en blanco.

\S - Coincide con cualquier cosa menos caracteres de espacio en blanco.

\d - Coincide con cualquier dígito.

\D - Coincide con cualquier cosa excepto dígitos.

La búsqueda de "Chegeheets Regex" debería recompensarlo con muchos resúmenes útiles.

glenatron
fuente
Lea la clase de patrones JavaDoc
Christophe Roussy
64

Para que esto funcione en Javascript , tuve que hacer lo siguiente:

myString.split(/\s+/g)
Mike Manard
fuente
15
Esto está en Javascript. Yo tampoco estaba prestando atención :)
miracle2k
14
Ups Mi error. Tal vez esta respuesta aún ayudará a otros que se encuentran con este hilo mientras buscan una respuesta de Javascript. :-)
Mike Manard
Jaja, estaba buscando una respuesta para JavaScript, accidentalmente encontré esta pregunta y luego noté tu respuesta antes de irme. +1.
Kris
¡Eso es genial! Me alegra escuchar que esta respuesta resultó útil para alguien, incluso si respondió la pregunta incorrecta. :-)
Mike Manard
Esto también me ayudó mucho, necesitaba dividir los argumentos del servidor :)
ProgrammerPlays
11

También es posible que tenga un espacio UniCode sin interrupción xA0 ...

String[] elements = s.split("[\\s\\xA0]+"); //include uniCode non-breaking
jake_astub
fuente
esto me ayuda!
Surasin Tancharoen
10
String string = "Ram is going to school";
String[] arrayOfString = string.split("\\s+");
Flecha
fuente
@Stephan No los vi.
Flecha
2

Dado que es una expresión regular, y supongo que tampoco querría caracteres no alfanuméricos como comas, puntos, etc. que podrían estar rodeados de espacios en blanco (por ejemplo, "uno, dos" debería dar [uno] [dos]), debería ser:

myString.split(/[\s\W]+/)
Rishabh
fuente
1

puede dividir una cadena por salto de línea utilizando la siguiente instrucción:

 String textStr[] = yourString.split("\\r?\\n");

puede dividir una cadena por espacios en blanco utilizando la siguiente instrucción:

String textStr[] = yourString.split("\\s+");
RajeshVijayakumar
fuente
1
String str = "Hello   World";
String res[] = str.split("\\s+");
Olivia Liao
fuente
-1

Estudia este código .. buena suerte

    import java.util.*;
class Demo{
    public static void main(String args[]){
        Scanner input = new Scanner(System.in);
        System.out.print("Input String : ");
        String s1 = input.nextLine();   
        String[] tokens = s1.split("[\\s\\xA0]+");      
        System.out.println(tokens.length);      
        for(String s : tokens){
            System.out.println(s);

        } 
    }
}
Risith Ravisara
fuente
¿Puedes detallar tu respuesta?
Stephan