2008-10-22 19 views

Respuesta

867

Algo en las líneas de

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

Esto agrupa todos los espacios en blanco como un delimitador.

Así que si tengo la cadena:

"Hello[space][tab]World"

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

Como señaló VonC, la barra diagonal inversa debe ser escapada, porque Java primero intentará escapar de la cadena a un carácter especial, y enviará que se analizará. Lo que quiere, es el literal "\s", lo que significa que debe pasar "\\s". Puede ser un poco confuso.

El \\s es equivalente a [ \\t\\n\\x0B\\f\\r]

+0

Gracias por ese recordatorio. Solo estaba codificando desde la cadera :) –

+25

Tenga en cuenta que debe 'trim()' first: 'trim(). Split (" \\ s ++ ")'; de lo contrario, p. Ej. dividir 'a b c' emitirá primero dos cadenas vacías. –

+0

¿Por qué usaste cuatro barras invertidas cerca del final de tu respuesta? es decir. '" \\\\ s "'? –

35

"\\ s +" debe hacer el truco

+1

Por qué el + al final? – Floella

+3

@Anarelle repite la captura del personaje espacial al menos una vez, y el mayor tiempo posible: ver [https://regex101.com/r/dT7wG9/1](https://regex101.com/r/dT7wG9/1) o [http://rick.measham.id.au/paste/explain.pl?regex=\s%2B] (http: //rick.measham.id.au/paste/explain.pl? regex = \ s% 2B) o [http://regexper.com/#^s%2B](http://regexper.com/#^s%2B) o [http://www.myezapp.com/apps/dev /regexp/show.ws?regex=\s+&env=env_java](http://www.myezapp.com/apps/dev/regexp/show.ws?regex=\s+&env=env_java) – VonC

77

En la mayoría de los dialectos de expresiones regulares no son un conjunto de carácter práctico resúmenes se pueden utilizar para este tipo de cosas - estos son buenos para recordar:

\w - Coincide con cualquier personaje de palabra.

\W - Coincide con cualquier caracter que no sea una palabra.

\s - Coincide con cualquier carácter de espacio en blanco.

\S - Encuentra cualquier cosa que no sean espacios en blanco.

\d - Coincide con cualquier número.

\D - Empareja cualquier cosa excepto los dígitos.

Una búsqueda de "Cheatsheets Regex" debería recompensarlo con una gran cantidad de resúmenes útiles.

+2

Enlace útil: http://docs.oracle.com/javase/1.4.2/docs/api/java/util/regex/Pattern.html –

+0

el enlace ya no funciona. por favor, actualice –

+0

gran información gracias – Simmant

2

Dado que es una expresión regular, y estoy asumiendo u también no querría caracteres no alfanuméricos como comas, puntos, etc., que podrían ser rodeados por espacios en blanco (por ejemplo,"Uno, dos" debe dar [un] [dos]), que debe ser:

myString.split(/[\s\W]+/) 
+2

El código de Java proporcionado aquí no se compila. – Stephan

56

para conseguir este trabajando en Javascript, que tenía que hacer lo siguiente:

myString.split(/\s+/g) 
+15

Esto está en Javascript. Yo tampoco estaba prestando atención :) – miracle2k

+14

Vaya. Mi error. Tal vez esta respuesta aún ayudará a otros que tropiecen con este hilo mientras buscan una respuesta de Javascript. :-) –

+0

Haha Estaba buscando una respuesta para JavaScript, accidentalmente me encontré con esta pregunta y luego noté su respuesta antes de irme. +1. – Kris

1

se puede dividir una cadena de salto de línea mediante la siguiente declaración:

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

se puede dividir una cadena por espacios en blanco con la siguiente declaración:

String textStr[] = yourString.split("\\s+"); 
9

También usted puede tener una UniCode de no separación espacio xA0 ...

String[] elements = s.split("[\\s\\xA0]+"); //include uniCode non-breaking 
+0

¡esto me ayuda! –

+0

Esto funcionó para mí también :)! – aravind

1
String str = "Hello World"; 
String res[] = str.split("\\s+"); 
+0

¿En qué se diferencia esto de la respuesta aceptada? – Stephan

8
String string = "Ram is going to school"; 
String[] arrayOfString = string.split("\\s+"); 
+0

Esta es la respuesta correcta – Arrow

+0

Estoy seguro. Funcionará. – Arrow

+0

¿Cómo es diferente de la respuesta aceptada? – Stephan

-1

Estudio de 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); 

     } 
    } 
} 
+0

¿Puede por favor detallar su respuesta? – Stephan

Cuestiones relacionadas