So teilen Sie einen String nach Leerzeichen

328

Ich muss meinen String durch Leerzeichen teilen. Dafür habe ich versucht:

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

Aber es scheint nicht zu funktionieren.

Safari
quelle
3
Sieht gut aus ... was sind die Werte im 'geteilten' Array?
Npinti
1
Ihr Code funktioniert tatsächlich so wie er ist. Sehen Sie den Code live auf IdeOne.com .
Basil Bourque
@BasilBourque - Ich konnte auf diesem Link keinen Run-Button finden
nanosoft
1
@nanosoft Die Seite bei IdeOne.com wird beim Laden automatisch ausgeführt. Siehe Ausgabe unter dem Code im Abschnitt stdout . Um den Code zu ändern, klicken Sie auf den forkLink in der oberen linken Ecke.
Basil Bourque

Antworten:

638

Was du hast, sollte funktionieren. Wenn die bereitgestellten Leerzeichen jedoch standardmäßig ... etwas anderes sind? Sie können den Leerzeichen-Regex verwenden:

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

Dies führt dazu, dass eine beliebige Anzahl aufeinanderfolgender Leerzeichen Ihre Zeichenfolge in Token aufteilt.

Nebenbei bemerkt, ich bin mir nicht sicher, ob "gespalten" ein Wort ist :) Ich glaube, der Zustand, Opfer einer Spaltung zu sein, ist auch "gespalten". Es ist eines dieser kniffligen Grammatik-Dinge :-) Ich versuche nicht, wählerisch zu sein, ich dachte nur, ich würde es weitergeben!

corsiKa
quelle
45
Ich bin Schweizer, was hast du erwartet, mein Englisch ist nicht das beste; P, trotzdem hat es funktioniert!
Safari
29
:-) Hey, es ist nicht groß. Ich habe einige lächerliche Variablennamen verwendet (im Code hätte ich wahrscheinlich nicht loslassen sollen!). Ich habe nicht versucht, ein Grammatik-Nazi zu sein oder so, nur ein paar Kleinigkeiten weiterzugeben, das ist alles.
CorsiKa
7
@ Safari, du hast gerade 2 tolle Ratschläge zum Preis von 1 bekommen. Nur ein Scherz. Gute Antwort.
Nirmal Mangal
8
"Was Sie haben, sollte funktionieren" Ich sage ziemlich häufig etwas Ähnliches, wenn mein Code kaputt geht.
Griffin
1
Ich finde es nützlich, da mein Anwendungsfall darin bestand, die Zeichenfolge zu teilen und mehrere Leerzeichen zu entfernen. Eine Codezeile erledigt beides für mich.
Niharika Upadhyay
85

Beachten Sie, dass die akzeptierte Antwort zwar gut ist, Sie jedoch eine führende leere Zeichenfolge erhalten, wenn Ihre Eingabezeichenfolge mit einem Leerzeichen beginnt. Zum Beispiel mit:

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

Das Ergebnis wird sein:

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

Vielleicht möchten Sie Ihre Saite kürzen, bevor Sie sie teilen:

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

Ich glaube, dass ein regulärer Ausdruck in den Klammern von str.split das Problem lösen sollte. Die Java String.split () -Methode basiert auf regulären Ausdrücken. Sie benötigen also Folgendes:

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

Verwenden Sie Stringutils.split()diese Option , um die Zeichenfolge durch weiße Schritte zu teilen. Gibt zum Beispiel StringUtils.split("Hello World")"Hallo" und "Welt" zurück;

Um den genannten Fall zu lösen, verwenden wir eine solche Split-Methode

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

Wenn wir das geteilte Array drucken, lautet die Ausgabe wie folgt:

Hallo

Ich bin

Ihre

String

Eine vollständige Demo finden Sie hier

Sandeep Vanama
quelle
6

Wenn Sie die String-Split-Methode nicht verwenden möchten, können Sie die StringTokenizer-Klasse in Java als verwenden.

    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
quelle
Es besteht die Möglichkeit, eine ArrayIndexOutofBounds-Ausnahme auszulösen.
Ajay Takur
2
Nein, dies wird nicht "ArrayIndexOutofBounds" auslösen, da ich die Array-Größe entsprechend der Anzahl der in String gefundenen Token deklariert habe. Dadurch wird sichergestellt, dass die Array-Größe nicht größer als die empfangenen Token in einer Zeichenfolge ist.
Muhammad Suleman
6

Probier diese

    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
quelle
4

Ein alternativer Weg wäre:

import java.util.regex.Pattern;

...

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

Hab es hier gesehen

gjain
quelle
3

OK, also müssen wir uns aufteilen, da Sie bereits die Antwort erhalten haben, die ich verallgemeinern würde.

Wenn Sie eine Zeichenfolge durch Leerzeichen teilen möchten, trennen Sie das Zeichen (Sonderzeichen).

Entfernen Sie zunächst den führenden Bereich, da die meisten Probleme auftreten.

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

Entfernen Sie zuerst das führende Leerzeichen, das Leerzeichen, Tabulator usw. sein kann.

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

Nun, wenn Sie nach Leerzeichen oder Sonderzeichen aufteilen möchten.

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

Da w jedoch [a-zA-Z_0-9] enthält, verwenden Sie auch, wenn Sie durch Unterstrich (_) teilen möchten

 String[] sa = s.split("[!,? ._'@]+");//for str2 after removing leading space
Anuj Kumar Soni
quelle
Das replaceAll("^\\s+","")hat mir den Tag gerettet. Das hat bei meinem Fall funktioniert. Vielen Dank
Kostas Asargiotakis
2

Sehr einfaches Beispiel unten:

Ich hoffe es hilft.

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
quelle
1

Sie können die Zeichenfolge mit dem folgenden Code saperieren

   String thisString="Hello world";

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

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

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

Hier ist eine Methode zum Trimmen eines Strings mit einem "," oder Leerzeichen

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

        return output;
    }
MrG
quelle
0

Da es eine Weile her ist, dass diese Antworten veröffentlicht wurden, ist hier eine andere aktuellere Methode, um das zu tun, was gefragt wird:

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

Jetzt haben Sie eine Liste von Zeichenfolgen (die wohl besser ist als ein Array); Wenn Sie ein Array benötigen, können Sie dies tunoutput.toArray(new String[0]);

daniu
quelle
0

Nicht nur Leerzeichen, sondern meine Lösung löst auch die unsichtbaren Zeichen.

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

Einfach, String durch Leerzeichen zu spucken

    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
quelle