Rumah > Java > javaTutorial > teks badan

Mengapakah String.replaceAll(regex) menggantikan dua kali apabila menggunakan \'.*\'?

Susan Sarandon
Lepaskan: 2024-10-31 16:03:46
asal
613 orang telah melayarinya

Why does String.replaceAll(regex) replace twice when using

Mengapa String.replaceAll(regex) Menggantikan Dua Kali

Dalam coretan kod:

System.out.println("test".replaceAll(".*", "a"));
Salin selepas log masuk

ungkapan biasa .* sepadan dengan mana-mana aksara, termasuk sifar aksara. Ini bermakna ia boleh memadankan keseluruhan rentetan dua kali:

  • Semasa hantaran pertama, .* memadankan keseluruhan rentetan dan menggantikannya dengan "a."
  • Semasa hantaran kedua, .* sepadan dengan rentetan kosong pada penghujung input (kerana ia boleh memadankan sifar aksara) dan menggantikannya dengan "a" lain.

Tingkah laku ini tidak dianggap sebagai pepijat dalam enjin regex Java . Sebaliknya, ia adalah akibat daripada cara .* sepadan dengan mana-mana watak.

Alternatif

Untuk mengelakkan tingkah laku ini, anda boleh menggunakan alternatif berikut:

  • Gunakan .replaceFirst() untuk menggantikan kejadian pertama sahaja:
"test".replaceFirst(".*", "a")
Salin selepas log masuk
  • Gunakan .matches() untuk menyemak sama ada keseluruhan rentetan sepadan dengan ungkapan biasa yang diberikan:
System.out.println("test".matches(".*")); // Prints true
Salin selepas log masuk
  • Gunakan ungkapan biasa yang lebih khusus, seperti . yang memerlukan sekurang-kurangnya satu aksara:
System.out.println("test".replaceAll(".+", "a")); // Prints a
Salin selepas log masuk

Atas ialah kandungan terperinci Mengapakah String.replaceAll(regex) menggantikan dua kali apabila menggunakan \'.*\'?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!