这个循环怎么结束不了啊

```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语句