1. Gambaran keseluruhan
Penggantian tali adalah operasi biasa ketika kita memproses rentetan di Java.
Terima kasih kepada kaedah ReplAll () yang berguna di kelas String , kita dapat dengan mudah melakukan penggantian rentetan dengan ungkapan biasa. Walau bagaimanapun, kadang-kadang ungkapan dapat membingungkan, misalnya, \ s dan \ s +.
Dalam tutorial ringkas ini, kita akan melihat perbezaan antara dua ungkapan biasa melalui contoh.
2. Perbezaan Antara \ s dan \ s +
Ungkapan biasa \ s adalah kelas watak yang telah ditetapkan. Ini menunjukkan watak ruang kosong tunggal. Mari tinjau set watak ruang kosong:
[ \t\n\x0B\f\r]
Tanda tambah + adalah pengukur tamak, yang bermaksud satu atau beberapa kali. Contohnya, ungkapan X + sepadan dengan satu atau lebih aksara X.
Oleh itu, ungkapan biasa \ s perlawanan watak ruang kosong tunggal, manakala \ s + akan sepadan dengan satu atau lebih ruang putih watak-watak.
3. gantiAll () Dengan Penggantian Tidak Kosong
Kami telah mengetahui maksud ungkapan biasa \ s dan \ s + .
Sekarang, mari kita lihat bagaimana kaedah ReplAll () berkelakuan berbeza dengan kedua ungkapan biasa ini.
Kami akan menggunakan rentetan sebagai teks input untuk semua contoh:
String INPUT_STR = "Text With Whitespaces! ";
Mari kita cuba lulus \ s kepada replaceAll () kaedah sebagai hujah:
String result = INPUT_STR.replaceAll("\\s", "_"); assertEquals("Text___With_____Whitespaces!___", result);
Kaedah ReplAll () mencari watak ruang kosong tunggal dan menggantikan setiap perlawanan dengan garis bawah. Kami mempunyai sebelas watak ruang kosong dalam teks input. Oleh itu, sebelas penggantian akan berlaku.
Seterusnya, mari sampaikan ungkapan biasa \ s + ke kaedah ReplAll () :
String result = INPUT_STR.replaceAll("\\s+", "_"); assertEquals("Text_With_Whitespaces!_", result);
Oleh kerana pengukur tamak + , kaedah ReplAll () akan memadankan urutan paling panjang watak ruang kosong bersebelahan dan menggantikan setiap perlawanan dengan garis bawah.
Dalam teks input kami, kami mempunyai tiga urutan watak ruang kosong yang bersebelahan. Oleh itu, masing-masing dari tiga akan menjadi garis bawah.
4. gantiAll () Dengan Penggantian Kosong
Penggunaan umum yang lain dari kaedah ReplAll () adalah untuk membuang corak yang sesuai dari teks input. Kami biasanya melakukannya dengan memberikan rentetan kosong sebagai pengganti kaedah.
Mari kita lihat hasil carian mana yang kita akan dapat jika kita mengeluarkan ruang kosong aksara menggunakan replaceAll () kaedah dengan \ s ungkapan biasa:
String result1 = INPUT_STR.replaceAll("\\s", ""); assertEquals("TextWithWhitespaces!", result1);
Sekarang, kita akan lulus ungkapan biasa yang lain \ s + kepada replaceAll () kaedah:
String result2 = INPUT_STR.replaceAll("\\s+", ""); assertEquals("TextWithWhitespaces!", result2);
Kerana penggantian adalah rentetan kosong, kedua-dua panggilan ReplAll () menghasilkan hasil yang sama, walaupun kedua ungkapan biasa mempunyai makna yang berbeza:
assertEquals(result1, result2);
Sekiranya kita membandingkan dua panggilan menggantikanAll () , panggilan dengan \ s + lebih berkesan. Ini kerana ia melakukan tugas dengan hanya tiga penggantian sementara panggilan dengan \ s akan melakukan sebelas penggantian.
5. Kesimpulan
Dalam artikel pendek ini, kami belajar tentang ungkapan biasa \ s dan \ s + .
Kami juga melihat bagaimana kaedah ReplAll () berkelakuan berbeza dengan dua ungkapan tersebut.
Seperti biasa, kodnya tersedia di GitHub.