Entschuldigung, warum kann die nachfolgende while-Schleife nicht mehr in den ersten Halbzweig eintreten, sobald die while-Schleife dieses Codes in den hinteren Teil von else eintritt? Ich denke, die Bedingung nach dem if sollte erfüllt sein. Das laufende Ergebnis kann nicht gebrochen werden, da es nicht in die erste Schleife gelangen kann. Gott um Rat bitten:
public class SearchString {
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++;
}
}
}
}
Das laufende Ergebnis ist -1 10 13 -1 10 13, eine Endlosschleife
因?yàn)楫?dāng)?shù)谌尾樵兊臅r(shí)候 無(wú)法匹配到結(jié)果因此返回的值-1, indexOf()的第二個(gè)參數(shù)如果小于0的話將被當(dāng)作0處理。
因此又開(kāi)始了第一次的循環(huán)。
你可以斷點(diǎn)調(diào)試下,結(jié)果很清楚
當(dāng)進(jìn)入第二次循環(huán)的時(shí)候進(jìn)入了else,pos變?yōu)?3。下次的循環(huán)也就是當(dāng)進(jìn)入第三次循環(huán)的時(shí)候還是進(jìn)入了else。
這次在else里面a變成了16,pos則為-1,下次的循環(huán)s1,indexOf(s2, pos)為0,還是進(jìn)入else了,所以產(chǎn)生了死循環(huán)。
我覺(jué)得你需要每次在else里面不要改變pos,而是要直接截s1字符串的后半部分。