Memahami Percanggahan dalam String.matches()
Apabila cuba mengesahkan rentetan menggunakan ungkapan biasa dalam Java, anda mungkin menghadapi tingkah laku yang tidak dijangka dengan kaedah String.matches(). Walaupun niat kaedah ini membayangkan pemadanan subrentetan dalam rentetan, ia sebenarnya cuba memadankan keseluruhan rentetan dengan ungkapan biasa yang disediakan.
Pertimbangkan coretan kod berikut:
String[] words = {"{apf","hum_","dkoe","12f"}; for(String s:words) { if(s.matches("[a-z]")) { System.out.println(s); } }
Sebagaimana anda perasan, kod ini gagal mencetak output yang dijangkakan ("dkoe") kerana ia tidak sepadan dengan subrentetan yang dikehendaki tetapi sebaliknya menyemak sama ada keseluruhan rentetan mengandungi huruf kecil sahaja huruf.
Penyelesaian: Menggunakan Corak dan Penjodoh
Untuk menyelesaikan isu ini, anda harus menggunakan kelas Corak dan Padanan bersama kaedah .find() untuk menentukan jika ungkapan biasa sepadan dengan mana-mana subrentetan dalam teks input. Pendekatan ini melibatkan langkah berikut:
Berikut ialah contoh:
Pattern p = Pattern.compile("[a-z]"); Matcher m = p.matcher(inputstring); if (m.find()) // match found
Jika anda ingin memastikan bahawa input hanya mengandungi huruf kecil, anda boleh menggunakan ungkapan biasa berikut: ^[a-z] $ . Jangan lupa gunakan .find() dan bukannya .matches().
Atas ialah kandungan terperinci Mengapakah `String.matches()` Java Gagal Memadankan Subrentetan dan Bagaimana Saya Boleh Memadankan Substring dengan Betul Menggunakan Ungkapan Biasa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!