Rumah > Java > javaTutorial > Mengapakah `String.matches()` Java Gagal Memadankan Subrentetan dan Bagaimana Saya Boleh Memadankan Substring dengan Betul Menggunakan Ungkapan Biasa?

Mengapakah `String.matches()` Java Gagal Memadankan Subrentetan dan Bagaimana Saya Boleh Memadankan Substring dengan Betul Menggunakan Ungkapan Biasa?

DDD
Lepaskan: 2024-12-02 03:14:15
asal
879 orang telah melayarinya

Why Does Java's `String.matches()` Fail to Match Substrings, and How Can I Correctly Match Substrings Using Regular Expressions?

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);
    }
}
Salin selepas log masuk

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:

  1. Buat objek Corak dengan menyusun ungkapan biasa.
  2. Buat objek Matcher dengan menggunakan corak pada rentetan input.
  3. Gunakan kaedah .find() pemadan untuk menyemak sama ada corak sepadan dengan mana-mana subrentetan.

Berikut ialah contoh:

Pattern p = Pattern.compile("[a-z]");
Matcher m = p.matcher(inputstring);
if (m.find())
    // match found
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan