Jak podzielić ciąg z dowolnymi znakami spacji jako ogranicznikami

555

Co regex wzór I musiałby przejść do java.lang.String.split() rozdzielić ciąg na tablicę podciągów z wykorzystaniem wszystkich białych znaków ( ' ', '\t', '\n'itd) jako ograniczniki?

mcjabberz
źródło

Odpowiedzi:

955

Coś w linii

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

Grupuje wszystkie białe spacje jako separator.

Więc jeśli mam ciąg:

"Hello[space][tab]World"

Powinno to dać ciągi znaków "Hello"i "World"pominąć pustą przestrzeń między [space]i [tab].

Jak VonC wskazał, odwrotny ukośnik należy uciekł, ponieważ Java najpierw spróbuje uciec ciąg szczególnym charakterze, a także wysyłać które mają być przetwarzane. To, czego chcesz, to dosłowność "\s", co oznacza, że ​​musisz zdać "\\s". Może to być trochę mylące.

Jest \\sto równoważne z [ \\t\\n\\x0B\\f\\r].

Henrik Paul
źródło
1
Dziękuję za to przypomnienie. Właśnie kodowałem z biodra :)
Henrik Paul
34
Zauważ, że musisz trim()najpierw: trim().split("\\s++")- w przeciwnym razie, np. Podzielenie `abc` wyemituje najpierw dwa puste ciągi.
Marcus Junius Brutus
Dlaczego użyłeś czterech odwrotnych ukośników pod koniec swojej odpowiedzi? to znaczy. "\\\\s"?
Michał Borkowski
„” .trim (). split („\\ s +”) - pusty ciąg znaków split daje długość 1. „term” .trim (). split („\\ s +”) - daje również długość 1 .
PaulSchell
88

W większości dialektów wyrażeń regularnych istnieje zestaw wygodnych streszczeń postaci, których możesz użyć do tego rodzaju rzeczy - warto o nich pamiętać:

\w - Dopasowuje dowolny znak słowa.

\W - Dopasowuje dowolny znak niebędący słowem.

\s - Pasuje do każdego znaku białej spacji.

\S - Pasuje do wszystkich znaków oprócz białych znaków.

\d - Pasuje do dowolnej cyfry.

\D - Dopasowuje wszystko oprócz cyfr.

Poszukiwanie „Regex Cheatsheets” powinno nagrodzić cię wieloma przydatnymi streszczeniami.

glenatron
źródło
64

Aby to działało w JavaScript , musiałem wykonać następujące czynności:

myString.split(/\s+/g)
Mike Manard
źródło
15
To jest w JavaScript. Ja też nie zwracałem uwagi :)
miracle2k
14
Ups Mój błąd. Być może ta odpowiedź nadal pomoże niektórym, którzy natkną się na ten wątek, szukając odpowiedzi JavaScript. :-)
Mike Manard,
Haha, szukałem odpowiedzi na JavaScript, przypadkowo natknąłem się na to pytanie, a potem zauważyłem twoją odpowiedź, zanim odszedłem. +1.
Kris,
To wspaniale! Cieszę się, że ta odpowiedź okazała się przydatna dla kogoś, nawet jeśli odpowiedziała na złe pytanie. :-)
Mike Manard,
Pomogło mi to również bardzo, potrzebne do podzielenia argumentów serwera :)
ProgrammerPlays
11

Możesz także mieć niełamującą spację xA0 UniCode ...

String[] elements = s.split("[\\s\\xA0]+"); //include uniCode non-breaking
jake_astub
źródło
to mi pomaga!
Surasin Tancharoen
10
String string = "Ram is going to school";
String[] arrayOfString = string.split("\\s+");
Strzałka
źródło
@Stephan Nie widziałem ich.
Strzałka
2

Ponieważ jest to wyrażenie regularne i zakładam, że nie chciałbyś także znaków innych niż alfanumeryczne, takich jak przecinki, kropki itp., Które mogłyby być otoczone spacjami (np. „Jeden, dwa” powinien dać [jeden] [dwa]), powinno być:

myString.split(/[\s\W]+/)
Rishabh
źródło
1

możesz podzielić ciąg według podziału wiersza, używając następującej instrukcji:

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

możesz podzielić ciąg według białych znaków, używając następującej instrukcji:

String textStr[] = yourString.split("\\s+");
RajeshVijayakumar
źródło
1
String str = "Hello   World";
String res[] = str.split("\\s+");
Olivia Liao
źródło
-1

Przestudiuj ten kod ... powodzenia

    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
źródło
Czy możesz szczegółowo opisać swoją odpowiedź?
Stephan