So teilen Sie eine Zeichenfolge mit Leerzeichen als Trennzeichen

555

Was müßte mich RegexMuster passieren zu java.lang.String.split() einem String in ein Array von Teil Zeichen mit allen Leerzeichen zu trennen ( ' ', '\t', '\n', etc.) als Trennzeichen?

mcjabberz
quelle

Antworten:

955

Etwas in den Zeilen von

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

Dadurch werden alle Leerzeichen als Trennzeichen gruppiert.

Also, wenn ich die Zeichenfolge habe:

"Hello[space][tab]World"

Dies sollte die Zeichenfolgen ergeben "Hello"und "World"den leeren Raum zwischen dem [space]und dem weglassen [tab].

Wie VonC betonte, sollte der Backslash maskiert werden, da Java zuerst versuchen würde, die Zeichenfolge einem Sonderzeichen zu maskieren und diese zum Parsen zu senden . Was Sie wollen, ist das Wörtliche "\s", was bedeutet, dass Sie bestehen müssen "\\s". Es kann etwas verwirrend werden.

Das \\sentspricht [ \\t\\n\\x0B\\f\\r].

Henrik Paul
quelle
1
Vielen Dank für diese Erinnerung. Ich habe gerade aus der Hüfte codiert :)
Henrik Paul
34
Beachten Sie, dass Sie trim()zuerst trim().split("\\s++")Folgendes tun müssen : - Andernfalls werden beim Teilen von `abc` zuerst zwei leere Zeichenfolgen ausgegeben.
Marcus Junius Brutus
Warum haben Sie gegen Ende Ihrer Antwort vier Backslashes verwendet? dh. "\\\\s"?
Michael Borkowski
"" .trim (). split ("\\ s +") - leere Zeichenfolgenaufteilung ergibt eine Länge von 1. "term" .trim (). split ("\\ s +") - gibt Ihnen auch eine Länge von 1 .
PaulSchell
88

In den meisten Regex-Dialekten gibt es eine Reihe praktischer Charakterzusammenfassungen, die Sie für diese Art von Dingen verwenden können - dies sind gute, an die Sie sich erinnern sollten:

\w - Entspricht einem beliebigen Wortzeichen.

\W - Entspricht einem beliebigen Nichtwortzeichen.

\s - Entspricht einem beliebigen Leerzeichen.

\S - Entspricht alles andere als Leerzeichen.

\d - Entspricht einer beliebigen Ziffer.

\D - Entspricht allem außer Ziffern.

Eine Suche nach "Regex Cheatsheets" sollte Sie mit vielen nützlichen Zusammenfassungen belohnen.

Glenatron
quelle
Lesen Sie die Musterklasse JavaDoc: docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html
Christophe Roussy
64

Damit dies in Javascript funktioniert , musste ich Folgendes tun:

myString.split(/\s+/g)
Mike Manard
quelle
15
Dies ist in Javascript. Ich habe auch nicht aufgepasst :)
miracle2k
14
Hoppla. Mein Fehler. Vielleicht hilft diese Antwort noch einigen anderen, die auf der Suche nach einer Javascript-Antwort über diesen Thread stolpern. :-)
Mike Manard
Haha, ich habe nach einer Antwort für JavaScript gesucht, bin versehentlich auf diese Frage gestoßen und habe dann Ihre Antwort bemerkt, bevor ich gegangen bin. +1.
Kris
Das ist großartig! Ich bin froh zu hören, dass sich diese Antwort für jemanden als nützlich erwiesen hat, auch wenn sie die falsche Frage beantwortet hat. :-)
Mike Manard
Dies hat mir auch sehr geholfen und musste Server-Argumente aufteilen :)
ProgrammerPlays
11

Möglicherweise haben Sie auch einen UniCode-Leerzeichen xA0 ...

String[] elements = s.split("[\\s\\xA0]+"); //include uniCode non-breaking
jake_astub
quelle
das hilft mir!
Surasin Tancharoen
10
String string = "Ram is going to school";
String[] arrayOfString = string.split("\\s+");
Pfeil
quelle
@Stephan Ich habe die nicht gesehen.
Pfeil
2

Da es sich um einen regulären Ausdruck handelt und ich davon ausgehe, dass Sie auch keine nicht alphanumerischen Zeichen wie Kommas, Punkte usw. möchten, die von Leerzeichen umgeben sein könnten (z. B. "eins, zwei" sollte [eins] [zwei] geben), es sollte sein:

myString.split(/[\s\W]+/)
Rishabh
quelle
1

Mit der folgenden Anweisung können Sie eine Zeichenfolge nach Zeilenumbruch aufteilen:

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

Mit der folgenden Anweisung können Sie eine Zeichenfolge nach Leerzeichen aufteilen:

String textStr[] = yourString.split("\\s+");
RajeshVijayakumar
quelle
1
String str = "Hello   World";
String res[] = str.split("\\s+");
Olivia Liao
quelle
-1

Studieren Sie diesen Code .. viel Glück

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

        } 
    }
}
Risith Ravisara
quelle
Können Sie bitte Ihre Antwort detaillieren?
Stephan