```java
public int get(String s1,String s2){
int num=0;
boolean isflag=true;
while(isflag){
num++;
s2 = s2.substring(s2.indexOf(s1));
if (s2.indexOf(s1)==-1){
isflag=false;
}
}return num;
}
当s2是s1的子串时,执行s2 = s2.substring(s2.indexOf(s1));
s2仍然是s1的子串,循环继续,你没有办法去打断他
逻辑有问题,也没说明白想解决什么问题。我猜是计算子串出现的次数。
public class Demo{
public static int get(String s1, String s2){
int num=0;
boolean isflag=true;
while(isflag){
int index = s2.indexOf(s1);
if (index >= 0){
s2 = s2.substring(index + s1.length());
++num;
}
else {
isflag=false;
}
}
return num;
}
public static void main(String[] args) {
int num = get("abc", "abc111abc222cc333abcNNN");
System.out.println(num);
}
}
重构一下:
public class Demo{
///函数名也要有意义
public static int countSubstring(String sub, String s2){ // 一般是子串在后,你这里反着也很别扭
int count = 0; // 起一个有意义的名字,很重要
boolean hasFound = true; //布尔型,起个好名字
int index;
do {
index = s2.indexOf(sub); //先看子串出现了没有
if (index >= 0){
s2 = s2.substring(index + sub.length());
++count; // 单行,就不要后num++的表示法
}
}while(index >= 0);
return count;
}
public static void main(String[] args) {
int num = countSubstring("abc", "abc111abc222cc333abcNNN");
System.out.println(num);
}
}
再重构一下:
public class Demo{
///函数名也要有意义
public static int countSubstring(String sub, String s2){ // 一般是子串在后,你这里反着也很别扭
int count = 0; // 起一个有意义的名字,很重要
int index;
while((index = s2.indexOf(sub)) >= 0) {
s2 = s2.substring(index + sub.length());
++count;
}
return count;
}
public static void main(String[] args) {
int num = countSubstring("abc", "abc111abc222cc333abcNNN");
System.out.println(num);
}
}
说明没进去过if语句