Dokumentasi resmi Java menyatakan:
String "boo:and:foo"
, misalnya, menghasilkan hasil berikut dengan ekspresi ini Hasil Regex:
{ "boo", "and", "foo" }"
Dan itulah cara saya membutuhkannya untuk bekerja. Namun, jika saya menjalankan ini:
public static void main(String[] args){
String test = "A|B|C||D";
String[] result = test.split("|");
for(String s : result){
System.out.println(">"+s+"<");
}
}
itu mencetak:
><
>A<
>|<
>B<
>|<
>C<
>|<
>|<
>D<
Yang jauh dari yang saya harapkan:
>A<
>B<
>C<
><
>D<
Mengapa ini terjadi?
Jawaban:
Kamu butuh
split
menggunakan ekspresi reguler dan dalam regex|
adalah metacharacter yang mewakiliOR
operator. Anda perlu melarikan diri dari karakter yang menggunakan\
(ditulis dalam String karena"\\"
sejak\
itu juga merupakan metacharacter dalam String literal dan memerlukan yang lain\
untuk menghindarinya).Anda juga bisa menggunakan
dan biarkan
Pattern.quote
membuat versi lolos dari regex yang mewakili|
.sumber
split()
metode mengambil regex dan|
merupakan karakter khusus untuk reg exGunakan melarikan diri dengan benar:
string.split("\\|")
Atau, di Java 5+, gunakan helper
Pattern.quote()
yang telah dibuat untuk tujuan ini:yang bekerja dengan string input yang berubah-ubah. Sangat berguna saat Anda perlu mengutip / melarikan diri input pengguna.
sumber
Pattern.quote()
.Gunakan kode ini:
sumber
Anda juga bisa menggunakan pustaka apache dan melakukan ini:
sumber
Anda juga bisa menggunakan
.split("[|]")
.(Saya menggunakan ini sebagai gantinya
.split("\\|")
, yang tidak bekerja untuk saya.)sumber
Menentukan batas atau maks akan akurat untuk contoh seperti: "boo ||| a" atau "|| boo |" atau "|||"
Tetapi
test.split("\\|");
akan mengembalikan array string panjang yang berbeda untuk contoh yang sama.gunakan referensi: tautan
sumber
metode split () mengambil ekspresi reguler sebagai argumen
sumber