Cara membagi string dengan karakter spasi apa saja sebagai pembatas

555

Apa pola regex perlu saya untuk lolos ke java.lang.String.split() untuk membagi String menjadi Array substring menggunakan semua karakter spasi ( ' ', '\t','\n' , dll) sebagai pembatas?

mcjabberz
sumber

Jawaban:

955

Sesuatu di barisan

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

Ini mengelompokkan semua ruang putih sebagai pembatas.

Jadi jika saya memiliki string:

"Hello[space][tab]World"

Ini harus menghasilkan string "Hello"dan "World"dan menghilangkan ruang kosong antara [space]dan[tab] .

Sebagai VonC menunjukkan, backslash harus melarikan diri, karena Java pertama akan mencoba untuk melarikan diri dari string untuk karakter khusus, dan mengirim yang dapat dipecah. Yang Anda inginkan, adalah literal "\s", yang berarti, Anda harus lulus "\\s". Itu bisa sedikit membingungkan.

Ini \\ssetara dengan [ \\t\\n\\x0B\\f\\r].

Henrik Paul
sumber
1
Terima kasih atas pengingat itu. Saya baru saja mengkode dari pinggul :)
Henrik Paul
34
Perhatikan bahwa Anda harus trim()terlebih dahulu: trim().split("\\s++")- jika tidak, mis. Membelah `abc` akan memancarkan dua string kosong terlebih dahulu.
Marcus Junius Brutus
Mengapa Anda menggunakan empat garis miring terbalik pada akhir jawaban Anda? yaitu. "\\\\s"?
Michael Borkowski
"" .trim (). split ("\\ s +") - string kosong memberi Anda panjang 1. "istilah" .trim (). split ("\\ s +") - memberi Anda juga panjang 1 .
PaulSchell
88

Dalam sebagian besar dialek regex ada satu set ringkasan karakter yang nyaman yang dapat Anda gunakan untuk hal semacam ini - ini adalah yang baik untuk diingat:

\w - Cocok dengan karakter kata apa pun.

\W - Cocok dengan karakter non-kata.

\s - Cocok dengan karakter spasi-putih.

\S - Cocok dengan apa pun kecuali karakter spasi putih.

\d - Cocok dengan angka apa pun.

\D - Mencocokkan apa pun kecuali angka.

Pencarian untuk "Regex Cheatsheets" akan memberi Anda banyak ringkasan yang bermanfaat.

glenatron
sumber
Baca kelas Pola JavaDoc
Christophe
64

Agar ini berfungsi dalam Javascript , saya harus melakukan hal berikut:

myString.split(/\s+/g)
Mike Manard
sumber
15
Ini dalam Javascript. Saya juga tidak memperhatikan :)
miracle2k
14
Ups. Kesalahanku. Mungkin jawaban ini masih akan membantu beberapa orang lain yang menemukan utas ini saat mencari jawaban Javascript. :-)
Mike Manard
Haha saya sedang mencari jawaban untuk JavaScript, secara tidak sengaja menemukan pertanyaan ini dan kemudian memperhatikan jawaban Anda sebelum saya pergi. +1.
Kris
Itu keren! Saya senang mendengar jawaban ini terbukti bermanfaat bagi seseorang, bahkan jika itu menjawab pertanyaan yang salah. :-)
Mike Manard
Ini sangat membantu saya juga, diperlukan untuk membagi server args :)
ProgrammerPlays
11

Anda juga dapat memiliki ruang UniCode ...

String[] elements = s.split("[\\s\\xA0]+"); //include uniCode non-breaking
jake_astub
sumber
ini membantu saya!
Surasin Tancharoen
10
String string = "Ram is going to school";
String[] arrayOfString = string.split("\\s+");
Panah
sumber
@Stephan saya tidak melihat itu.
Panah
2

Karena ini adalah ekspresi reguler, dan saya berasumsi kamu juga tidak ingin karakter non-alfanumerik seperti koma, titik, dll yang dapat dikelilingi oleh blank (misalnya "satu, dua" harus memberikan [satu] [dua]), harus:

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

Anda dapat membagi string dengan jeda baris dengan menggunakan pernyataan berikut:

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

Anda dapat membagi string dengan Whitespace dengan menggunakan pernyataan berikut:

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

Pelajari kode ini .. semoga berhasil

    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
sumber
Bisakah Anda merinci jawaban Anda?
Stephan