Cómo dividir una cadena por espacio

329

Necesito dividir mi cadena por espacios. Para esto probé:

str = "Hello I'm your String";
String[] splited = str.split(" ");

Pero no parece funcionar.

safari
fuente
3
Se ve bien ... ¿cuáles son los valores en la matriz 'dividida'?
npinti
1
Su código de hecho funciona tal como está. Vea el código en vivo en IdeOne.com .
Basil Bourque
@BasilBourque - No pude encontrar ningún botón de ejecución en ese enlace
nanosoft
1
@nanosoft La página en IdeOne.com se ejecuta automáticamente al cargar. Vea la salida debajo del código, en la sección stdout . Para alterar el código, haga clic en el forkenlace cerca de la esquina superior izquierda.
Basil Bourque

Respuestas:

639

Lo que tienes debería funcionar. Sin embargo, si los espacios provistos están predeterminados a ... ¿algo más? Puede usar la expresión regular de espacios en blanco:

str = "Hello I'm your String";
String[] splited = str.split("\\s+");

Esto hará que cualquier número de espacios consecutivos divida su cadena en tokens.

Como nota al margen, no estoy seguro de que "dividir" sea una palabra :) Creo que el estado de ser víctima de una división también es "división". Es una de esas cosas gramaticales complicadas :-) ¡No trato de ser exigente, solo pensé que lo transmitiría!

corsiKa
fuente
45
Soy suizo, ¿qué esperabas, mi inglés no es el mejor; P, de todos modos, funcionó!
safari
29
:-) Hola, no es grande. He usado algunos nombres de variables ridículos (¡en un código que probablemente no debería haber dejado vivir!) No estaba tratando de ser un nazi gramatical ni nada, solo pasaba un poco de trivia, eso es todo.
corsiKa
77
@Safari, acabas de recibir 2 excelentes consejos en el precio de 1. Es broma. Gran respuesta.
Nirmal Mangal
8
"Lo que tienes debería funcionar" Digo algo similar con bastante frecuencia cuando se rompe mi código.
Griffin
1
Me resulta útil ya que mi caso de uso era dividir la cadena y eliminar múltiples espacios. Una línea de código hace las dos cosas por mí.
Niharika Upadhyay
87

Si bien la respuesta aceptada es buena, tenga en cuenta que terminará con una cadena vacía inicial si su cadena de entrada comienza con un espacio en blanco. Por ejemplo, con:

String str = " Hello I'm your String";
String[] splitStr = str.split("\\s+");

El resultado será:

splitStr[0] == "";
splitStr[1] == "Hello";
splitStr[2] == "I'm";
splitStr[3] == "Your";
splitStr[4] == "String";

Por lo tanto, es posible que desee recortar su cadena antes de dividirla:

String str = " Hello I'm your String";
String[] splitStr = str.trim().split("\\s+");
GaspardP
fuente
29

Creo que poner una expresión regular entre paréntesis str.split debería resolver el problema. El método Java String.split () se basa en expresiones regulares, por lo que lo que necesita es:

str = "Hello I'm your String";
String[] splitStr = str.split("\\s+");
rbrtl
fuente
12

Se usa Stringutils.split()para dividir la cuerda por espacios en blanco. Por ejemplo, StringUtils.split("Hello World")devuelve "Hola" y "Mundo";

Para resolver el caso mencionado usamos un método dividido como este

String split[]= StringUtils.split("Hello I'm your String");

Cuando imprimimos la matriz dividida, la salida será:

Hola

estoy

tu

Cuerda

Para ver una demostración de ejemplo completa, consulte aquí

sandeep vanama
fuente
6

si de alguna manera no quieres usar el método de división de cadenas, puedes usar la clase StringTokenizer en Java como ...

    StringTokenizer tokens = new StringTokenizer("Hello I'm your String", " ");
    String[] splited = new String[tokens.countTokens()];
    int index = 0;
    while(tokens.hasMoreTokens()){
        splited[index] = tokens.nextToken();
        ++index;
    }
Muhammad Suleman
fuente
Existe la posibilidad de lanzar ArrayIndexOutofBounds Exception.
Ajay Takur
2
No, esto no arrojará "ArrayIndexOutofBounds" porque he declarado el tamaño de la matriz de acuerdo con el número de tokens encontrados en String. esto asegurará que el tamaño de las matrices no sea más que los tokens recibidos en una cadena.
Muhammad Suleman
6

Prueba este

    String str = "This is String";
    String[] splited = str.split("\\s+");

    String split_one=splited[0];
    String split_second=splited[1];
    String split_three=splited[2];

   Log.d("Splited String ", "Splited String" + split_one+split_second+split_three);
sachin pangare
fuente
4

Una forma alternativa sería:

import java.util.regex.Pattern;

...

private static final Pattern SPACE = Pattern.compile(" ");
String[] arr = SPACE.split(str); // str is the string to be split

Lo vi aquí

gjain
fuente
3

Bien, entonces tenemos que dividirnos, ya que ya obtuviste la respuesta, la generalizaría.

Si desea dividir cualquier cadena por espacios, delimitador (caracteres especiales).

Primero, elimine el espacio inicial ya que crean la mayoría de los problemas.

str1 = "    Hello I'm your       String    ";
str2 = "    Are you serious about this question_  boy, aren't you?   ";

Primero elimine el espacio inicial que puede ser espacio, tabulación, etc.

String s = str1.replaceAll("^\\s+","");//starting with whitespace one or more

Ahora si quieres dividir por espacio o cualquier carácter especial.

String[] sa = s.split("[^\\w]+");//split by any non word char

Pero como w contiene [a-zA-Z_0-9], si desea dividir por subrayado (_) también use

 String[] sa = s.split("[!,? ._'@]+");//for str2 after removing leading space
Anuj Kumar Soni
fuente
Eso replaceAll("^\\s+","")me salvó el día. Eso funcionó para mi caso. Gracias
Kostas Asargiotakis
2

Muy simple ejemplo a continuación:

Espero eso ayude.

String str = "Hello I'm your String";
String[] splited = str.split(" ");
var splited = str.split(" ");
var splited1=splited[0]; //Hello
var splited2=splited[1]; //I'm
var splited3=splited[2]; //your
var splited4=splited[3]; //String
BaxD
fuente
1

puedes separar la cadena usando el siguiente código

   String thisString="Hello world";

   String[] parts = theString.split(" ");

   String first = parts[0];//"hello"

    String second = parts[1];//"World"
Syed Danish Haider
fuente
0

Aquí hay un método para recortar una cadena que tiene un "," o espacio en blanco

private String shorterName(String s){
        String[] sArr = s.split("\\,|\\s+");
        String output = sArr[0];

        return output;
    }
MrG
fuente
0

Como ha pasado un tiempo desde que se publicaron estas respuestas, aquí hay otra forma más actual de hacer lo que se pide:

List<String> output = new ArrayList<>();
try (Scanner sc = new Scanner(inputString)) {
    while (sc.hasNext()) output.add(sc.next());
}

Ahora tiene una lista de cadenas (que posiblemente sea mejor que una matriz); si necesitas una matriz, puedes haceroutput.toArray(new String[0]);

daniu
fuente
0

No solo el espacio en blanco, sino que mi solución también resuelve los caracteres invisibles también.

str = "Hello I'm your String";
String[] splited = str.split("\p{Z}");
logbasex
fuente
-1

Cadena simple para escupir por espacio

    String CurrentString = "First Second Last";
    String[] separated = CurrentString.split(" ");

    for (int i = 0; i < separated.length; i++) {

         if (i == 0) {
             Log.d("FName ** ", "" + separated[0].trim() + "\n ");
         } else if (i == 1) {
             Log.d("MName ** ", "" + separated[1].trim() + "\n ");
         } else if (i == 2) {
             Log.d("LName ** ", "" + separated[2].trim());
         }
     }
Jaydeep Dobariya
fuente