Maafkan saya, mengapa apabila gelung while kod ini memasuki bahagian belakang kod lain, gelung while seterusnya tidak boleh lagi memasuki cawangan separuh pertama? Saya fikir syarat selepas jika harus dipenuhi Hasil larian tidak boleh dipecahkan kerana ia tidak boleh memasuki gelung pertama. Meminta nasihat kepada Tuhan:
SearchString kelas awam {
public static void main(String[] args) {
String s1 = "abcaaaaaaaabcabc";
String s2 = "abc";
int len = s2.length();
int pos = 0;
int count = 0;
while (true) {
if (s1.indexOf(s2, pos) == -1) {
System.out.println("Search Over, result count=" + count);
break;
} else {
System.out.println("Position" + (count + 1) + " is " + pos);
int a = pos + len;
pos = s1.indexOf(s2, a);
count++;
}
}
}
}
Hasil larian ialah -1 10 13 -1 10 13, gelung tak terhingga
Oleh kerana keputusan tidak boleh dipadankan apabila membuat pertanyaan untuk kali ketiga, nilai yang dikembalikan ialah -1 Jika parameter kedua indexOf() kurang daripada 0, ia akan dianggap sebagai 0.
Jadi kitaran pertama bermula semula.
Anda boleh nyahpepijat dengan titik putus, hasilnya akan menjadi sangat jelas
Apabila memasuki gelung kedua, lain dimasukkan, dan pos menjadi 13. Gelung seterusnya, iaitu, apabila memasuki gelung ketiga, ia masih memasuki gelung lain.
Kali ini, a menjadi 16 in else, dan pos ialah -1 Dalam gelung seterusnya, s1, indexOf(s2, pos) ialah 0, dan ia masih memasuki lain, jadi gelung tak terhingga dijana.
Saya rasa anda tidak perlu menukar pos masuk lain setiap kali, tetapi memintas terus separuh kedua rentetan s1.