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?

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].


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.




64

Damit dies in Javascript funktioniert , musste ich Folgendes tun:

myString.split(/\s+/g)

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

das hilft mir!
Surasin Tancharoen

10
String string = "Ram is going to school";
String[] arrayOfString = string.split("\\s+");

@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]+/)

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


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

        } 
    }
}

Können Sie bitte Ihre Antwort detaillieren?
Stephan
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.