Mengapa String.replaceAll(regex) Menggantikan Dua Kali
Dalam coretan kod:
System.out.println("test".replaceAll(".*", "a"));
ungkapan biasa .* sepadan dengan mana-mana aksara, termasuk sifar aksara. Ini bermakna ia boleh memadankan keseluruhan rentetan dua kali:
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:
"test".replaceFirst(".*", "a")
System.out.println("test".matches(".*")); // Prints true
System.out.println("test".replaceAll(".+", "a")); // Prints a
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!