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?

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


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.




64

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

myString.split(/\s+/g)

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



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

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

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


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

        } 
    }
}

Czy możesz szczegółowo opisać swoją odpowiedź?
Stephan
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.