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.


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!


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+");

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+");

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í



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;
    }

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

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í


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

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

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"

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;
    }

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]);


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}");

-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());
         }
     }
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.