Apa perbedaan antara dua ekspresi berikut?
x = x.replaceAll("\\s", "");
x = x.replaceAll("\\s+", "");
java
regex
string
quantifiers
mpluse
sumber
sumber
Jawaban:
Yang pertama cocok dengan satu spasi, sedangkan yang kedua cocok dengan satu atau banyak spasi. Mereka disebut pembilang ekspresi reguler, dan mereka melakukan kecocokan seperti ini (diambil dari dokumentasi ):
sumber
Kedua
replaceAll
panggilan tersebut akan selalu memberikan hasil yang sama, apapunx
itu. Namun, penting untuk diperhatikan bahwa kedua ekspresi reguler itu tidak sama:\\s
- cocok dengan karakter spasi putih tunggal\\s+
- mencocokkan urutan dari satu atau lebih karakter spasi.Dalam hal ini, tidak ada bedanya, karena Anda mengganti semuanya dengan string kosong (meskipun akan lebih baik menggunakan
\\s+
dari sudut pandang efisiensi). Jika Anda mengganti dengan string yang tidak kosong, keduanya akan berperilaku berbeda.sumber
Pertama-tama Anda perlu memahami bahwa hasil akhir dari kedua pernyataan akan sama yaitu menghapus semua spasi dari string yang diberikan.
Namun
x.replaceAll("\\s+", "");
akan lebih efisien cara pemangkasan spasi (jika string dapat memiliki beberapa spasi yang berdekatan) karena berpotensi lebih sedikit tidak ada penggantian karena fakta bahwa regex\\s+
cocok dengan 1 atau lebih spasi sekaligus dan menggantinya dengan string kosong.Jadi meskipun Anda mendapatkan hasil yang sama dari keduanya, lebih baik gunakan:
sumber
Regex pertama akan cocok dengan satu karakter spasi. Regex kedua akan dengan enggan mencocokkan satu atau lebih karakter spasi. Untuk sebagian besar tujuan, kedua ekspresi reguler ini sangat mirip, kecuali pada kasus kedua, ekspresi reguler dapat mencocokkan lebih banyak string, jika hal itu mencegah pencocokan ekspresi reguler gagal. dari http://www.coderanch.com/t/570917/java/java/regex-difference
sumber
\s+
, bukan\s+?
seperti pertanyaan lainnya.