import java.util.Scanner;
/**
*
@author Administrator
*/
public class Main {
/**
public static int f(String s1,String s2){
int a = s1.length();
int b = s2.length();
int i = 0,sum = 0;
while( i <= (b - a)){
if(s1.charAt(0) == s2.charAt(i)){
if(s2.substring(i, i + a ).equals(s1))
{i = i + a - 1 ;
sum++;
}
}
++i;
}
return sum;
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String s1=sc.nextLine();
String s2=sc.nextLine();
System.out.println(s1+"="+Main.f(s1, s2));
}
}
因为有可能第二个IF没进去,如果没进去的话,而i的改变还在第二个IF中,那就成死循环了~~
有这行代码if(s2.substring(i, i + a ).equals(s1))在i = i + a - 1 ;之前,也就是说这句代码的执行是有条件的,也就是说,如果这个条件不成立,后面一样要做++i,但i = i + a - 1 却是未必执行的,一个是有条件的,一个是无条件的,所以无法合并到一起去。
++i 在if语句外,是无条件执行的。
i= i + a - 1 在if语句内,是有条件执行的。
两者不好结合的。
要两者结合也只有在if语句外结合
while (i <= (b - a)) {
int z = 0;
if (s1.charAt(0) == s2.charAt(i)) {
if (s2.substring(i, i + a).equals(s1)) {
z = a - 1;
sum++;
}
}
i += z + 1;
}
判断语句的原因吧,有一定的限制导致不走这一步