java - ¿Cómo divido una cadena con caracteres de espacios en blanco como delimitadores?
split string java delimiter (12)
¿Qué patrón de expresiones regulares necesitaría que pase al método java.lang.String.split()
para dividir una cadena en una matriz de subcadenas usando todos los caracteres de espacio en blanco ('''', ''/ t'', ''/ n'', etc.) como delimitadores?
"// s +" debería hacer el truco
Algo en las lineas 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 cadenas "Hello"
y "World"
y omitir el espacio vacío entre el [space]
y la [tab]
.
Como señaló VonC, la barra diagonal inversa debería escaparse, ya que Java intentaría primero escapar de la cadena a un carácter especial y enviarla para analizarla. Lo que quieres es el literal "/s"
, lo que significa que debes pasar "//s"
. Puede ser un poco confuso.
La //s
es equivalente a [ //t//n//x0B//f//r]
Apache Commons Lang tiene un método para dividir una cadena con caracteres de espacio en blanco como delimitadores:
StringUtils.split("abc def")
Esto podría ser más fácil de usar que un patrón de expresiones regulares.
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 que no sea de palabra.
/s
- Coincide con cualquier carácter de espacio en blanco.
/S
- Coincide con cualquier cosa menos caracteres de espacios en blanco.
/d
- Coincide con cualquier dígito.
/D
- Coincide con cualquier cosa excepto los dígitos.
Una búsqueda de "Regex Cheatsheets" debería recompensarte con un montón de resúmenes útiles.
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);
}
}
}
Me sorprende que nadie haya mencionado String.split () sin parámetros. ¿No es para eso que está hecho? como en:
"abc def ghi".split()
Para que esto funcione en Javascript , tuve que hacer lo siguiente:
myString.split(//s+/g)
También puedes tener un espacio UniCode non-break xA0 ...
String[] elements = s.split("[//s//xA0]+"); //include uniCode non-breaking
Ya que es una expresión regular, y asumo que u tampoco querría caracteres no alfanuméricos como comas, puntos, etc. que podrían estar rodeados por espacios en blanco (por ejemplo, "uno, dos" debería dar [uno] [dos]), debería ser:
myString.split(/[/s/W]+/)
puede dividir una cadena por salto de línea usando la siguiente declaración:
String textStr[] = yourString.split("//r?//n");
puede dividir una cadena por espacio en blanco usando la siguiente declaración:
String textStr[] = yourString.split("//s+");
String str = "Hello World";
String res[] = str.split("//s+");
String string = "Ram is going to school";
String[] arrayOfString = string.split("//s+");