Java中循环和String类indexOf(,)方法的关系
String numTwo="1";
System.out.print("一段字符串"+numOne+"查找"+numTwo+"出现的位置");
System.out.print("“"+numTwo+"”"+"出现的位置是:");
for(int i=0;(i=numOne.indexOf(numTwo,i))>=0;i++) {
System.out.print(i + "\t");
}
这里的循环为什么可以跳出?i的值为什么不是+1递增? 展开
第一个问题,循环为什么可以跳出?
当循环条件不满足的时候,也就是(i = numOne.indexOf(numTwo, i)) 的值<0 的时候就能退出跳出
numOne.indexOf(numTwo, i)表示在字符串1里查找字符串2的位置,
如果找不到 或者 索引超过了字符串长度,
函数 就会返回-1,如果是-1.那么-1>=0 肯定是假,所以循环就会退出
比如12345678 那么循环会在第一次找到1,后面找不到就返回-1;循环就退出了
比如 ab 索引从0开始. b的索引是1, 如果这个时候"ab".index("b",2); 指定的索引下标2,超过了最大的索引限度, 也返回-1;
indexOf(int ch, int fromIndex)
返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索。
为什么不是+1递增?
其实本来i要加1递增的,因为循环条件里,又改变了i的值
第一次循环 numOne.indexOf(numTwo, i) 的结果是0,修改了i的值为0;
条件满足 (i = 0)>=0; 循环结束后i增加1, 那么i = 1;
第二次循环 numOne.indexOf(numTwo, i)的结果是6,修改了i的值为6;
条件满足 (i = 6)>=0; 循环结束后i增加1, 那么i = 7;
第三次循环 numOne.indexOf(numTwo, i)的结果是6,修改了i的值为10;
条件满足 (i = 10)>=0; 循环结束后i增加1, 那么i = 11;
...............同理中间的其他次循环..............
最后的循环 (上次循环后,i=14) i超过了字符串的最大索引13, numOne.indexOf(numTwo, i)就返回-1,修改了i的值为-1;
条件不满足 (i = -1)>=0; 退出循环,.结束