Ekspresi Reguler \ s dan \ s + di Java

1. Ikhtisar

Substitusi string adalah operasi standar saat kami memproses string di Java.

Berkat metode replaceAll () yang praktis di kelas String , kita dapat dengan mudah melakukan substitusi string dengan ekspresi reguler. Namun, terkadang ekspresi dapat membingungkan, misalnya \ s dan \ s +.

Dalam tutorial singkat ini, kita akan melihat perbedaan antara dua ekspresi reguler melalui contoh.

2. Perbedaan Antara \ s dan \ s +

Ekspresi reguler \ s adalah kelas karakter yang telah ditetapkan. Ini menunjukkan karakter spasi putih tunggal. Mari kita tinjau kumpulan karakter spasi:

[ \t\n\x0B\f\r]

Tanda plus + adalah pembilang serakah, yang artinya satu kali atau lebih. Misalnya, ekspresi X + cocok dengan satu atau lebih karakter X.

Oleh karena itu, ekspresi reguler \ s cocok dengan satu karakter spasi, sedangkan \ s + akan cocok dengan satu atau lebih karakter spasi.

3. ganti Semua () Dengan Pengganti Tidak Kosong

Kami telah mempelajari arti dari ekspresi reguler \ s dan \ s + .

Sekarang, mari kita lihat bagaimana metode replaceAll () berperilaku berbeda dengan dua ekspresi reguler ini.

Kami akan menggunakan string sebagai teks input untuk semua contoh:

String INPUT_STR = "Text With Whitespaces! ";

Mari kita coba meneruskan \ s ke metode replaceAll () sebagai argumen:

String result = INPUT_STR.replaceAll("\\s", "_"); assertEquals("Text___With_____Whitespaces!___", result);

Metode replaceAll () menemukan satu karakter spasi dan mengganti setiap kecocokan dengan garis bawah. Kami memiliki sebelas karakter spasi dalam teks masukan. Dengan demikian, sebelas penggantian akan terjadi.

Selanjutnya, mari teruskan ekspresi reguler \ s + ke metode replaceAll () :

String result = INPUT_STR.replaceAll("\\s+", "_"); assertEquals("Text_With_Whitespaces!_", result);

Karena pembilang serakah + , metode replaceAll () akan mencocokkan urutan terpanjang karakter spasi kosong yang berdekatan dan mengganti setiap kecocokan dengan garis bawah.

Dalam teks masukan kami, kami memiliki tiga urutan karakter spasi putih yang berdekatan. Oleh karena itu, ketiganya masing-masing akan menjadi garis bawah.

4. ganti Semua () Dengan Pengganti Kosong

Penggunaan umum lainnya dari metode replaceAll () adalah menghapus pola yang cocok dari teks masukan. Kami biasanya melakukannya dengan mengirimkan string kosong sebagai pengganti metode.

Mari kita lihat hasil apa yang akan kita dapatkan jika kita menghapus karakter spasi putih menggunakan metode replaceAll () dengan ekspresi reguler \ s :

String result1 = INPUT_STR.replaceAll("\\s", ""); assertEquals("TextWithWhitespaces!", result1);

Sekarang, kita akan meneruskan ekspresi reguler \ s + ke metode replaceAll () :

String result2 = INPUT_STR.replaceAll("\\s+", ""); assertEquals("TextWithWhitespaces!", result2); 

Karena penggantinya adalah string kosong, dua panggilan replaceAll () menghasilkan hasil yang sama, meskipun dua ekspresi reguler memiliki arti yang berbeda:

assertEquals(result1, result2);

Jika kita membandingkan dua panggilan replaceAll () , panggilan dengan \ s + lebih efisien. Ini karena ia melakukan tugasnya hanya dengan tiga penggantian sedangkan panggilan dengan \ s akan melakukan sebelas penggantian.

5. Kesimpulan

Dalam artikel singkat ini, kita belajar tentang ekspresi reguler \ s dan \ s + .

Kami juga melihat bagaimana metode replaceAll () berperilaku berbeda dengan dua ekspresi.

Seperti biasa, kode tersedia di GitHub.