matches()
hanya akan mengembalikan true jika string penuh cocok.
find()
akan mencoba menemukan kemunculan berikutnya dalam substring yang cocok dengan regex. Perhatikan penekanannya pada "selanjutnya". Itu berarti, hasil panggilan find()
beberapa kali mungkin tidak sama. Selain itu, dengan menggunakan find()
Anda dapat menelepon start()
untuk mengembalikan posisi substring yang cocok.
final Matcher subMatcher = Pattern.compile("\\d+").matcher("skrf35kesruytfkwu4ty7sdfs");
System.out.println("Found: " + subMatcher.matches());
System.out.println("Found: " + subMatcher.find() + " - position " + subMatcher.start());
System.out.println("Found: " + subMatcher.find() + " - position " + subMatcher.start());
System.out.println("Found: " + subMatcher.find() + " - position " + subMatcher.start());
System.out.println("Found: " + subMatcher.find());
System.out.println("Found: " + subMatcher.find());
System.out.println("Matched: " + subMatcher.matches());
System.out.println("-----------");
final Matcher fullMatcher = Pattern.compile("^\\w+$").matcher("skrf35kesruytfkwu4ty7sdfs");
System.out.println("Found: " + fullMatcher.find() + " - position " + fullMatcher.start());
System.out.println("Found: " + fullMatcher.find());
System.out.println("Found: " + fullMatcher.find());
System.out.println("Matched: " + fullMatcher.matches());
System.out.println("Matched: " + fullMatcher.matches());
System.out.println("Matched: " + fullMatcher.matches());
System.out.println("Matched: " + fullMatcher.matches());
Akan menghasilkan:
Ditemukan: false
Ditemukan: true - posisi 4
Ditemukan: true - posisi 17
Ditemukan: true - posisi 20
Ditemukan: false
Ditemukan: false
Cocok: salah
-----------
Ditemukan: true - position 0
Ditemukan: false
Ditemukan: false
Cocok: benar
Cocok: benar
Cocok: benar
Cocok: benar
Jadi, berhati-hatilah saat memanggil find()
beberapa kali jika Matcher
objek tidak disetel ulang, bahkan ketika regex dikelilingi dengan ^
dan $
untuk mencocokkan string penuh.
find()
beberapa kali dapat memberikan hasil yang berbeda untuk hal yang samaMatcher
. Lihat jawaban saya di bawah ini.