Katakanlah saya memiliki string yang berisi ini:
HelloxxxHelloxxxHello
Saya menyusun pola untuk mencari 'Halo'
Pattern pattern = Pattern.compile("Hello");
Matcher matcher = pattern.matcher("HelloxxxHelloxxxHello");
Ini harus menemukan tiga kecocokan. Bagaimana saya bisa menghitung berapa banyak pertandingan yang ada?
Saya sudah mencoba berbagai loop dan menggunakan matcher.groupCount()
tetapi tidak berhasil.
Jawaban:
matcher.find()
tidak menemukan semua kecocokan, hanya kecocokan berikutnya .Solusi untuk Java 9+
Solusi untuk Java 8 dan yang lebih lama
Anda harus melakukan hal berikut. ( Mulai dari Java 9, ada solusi yang lebih bagus )
Btw,
matcher.groupCount()
adalah sesuatu yang sangat berbeda.Contoh lengkapnya :
Menangani pertandingan yang tumpang tindih
Saat menghitung kecocokan
aa
dalamaaaa
cuplikan di atas akan memberi Anda 2 .Untuk mendapatkan 3 pertandingan, yaitu perilaku ini:
Anda harus mencari kecocokan di indeks
<start of last match> + 1
sebagai berikut:sumber
while(matcher.find()){ matcher.region(matcher.end()-1, str.length()); count++; }
Ini harus bekerja untuk pertandingan yang mungkin tumpang tindih:
sumber
Dari Java 9, Anda dapat menggunakan aliran yang disediakan oleh
Matcher.results()
sumber
Jika Anda ingin menggunakan aliran Java 8 dan alergi terhadap
while
loop, Anda dapat mencoba ini:Penafian: ini hanya berfungsi untuk pertandingan terputus-putus.
Contoh:
Ini mencetak:
Ini adalah solusi untuk kecocokan terputus-putus dengan aliran:
sumber
Gunakan kode di bawah ini untuk menemukan jumlah kecocokan yang ditemukan regex dalam masukan Anda
Ini adalah kode umum, bukan kode spesifik, sesuaikan dengan kebutuhan Anda
Jangan ragu untuk mengoreksi saya jika ada kesalahan.
sumber