package builder;
import java.util.ArrayList;
import java.util.List;
public class Test {
    public static void main(String[] args) {
        //下面期望输出[jgajgaagi;aghuhagajagg;;g, ga23ty1]
        String str="agaggaga<a;agpjgajgaagi;aghuhagajagg;;gakagkogagpga23ty1ak1hg";
        String open="a*gp";
        String close="ak";
        //下面期望输出[ag, pj, i;aghuha, g;;, ko]
        String str2="agaggaga<a;agpjgajgaagi;aghuhagajagg;;gakagkogaga23ty11hg";
        String open2="ag";
        String close2="ga";
        String str3="agaggaga<a;agpjgajgaagi;aghuhagajagg;;gaaxkagkogagpga23ty1ak1hgagagaagggaagp124321112a11k";
        String open3="gp";
        String close3="a*k";
        List<String> midList = getMidList(str, open, close);
        List<String> midList2 = getMidList(str3, open3, close3);
        System.out.println(midList);
        System.out.println(midList2);
    }
    public static List<String> getMidList(String str,String open,String close){
        List<String> retList = new ArrayList<>();//存储结果
        if(isEmpyty(str)|| isEmpyty(open) || isEmpyty(close)){
            return retList;
        }
        List<String> openList = getString(str, open);
        if(!openList.isEmpty()) {
            str = getMidTemp(openList, str, retList, close);
            while (true) {
                if (null == str) {
                    return retList;
                }
                openList = getString(str, open);
                if (openList.isEmpty()) {
                    return retList;
                }
                str = getMidTemp(openList, str, retList, close);
            }
        }
        return retList;
    }
    public static  String getMidTemp(List<String> openList,String str,List<String> retList,String close){
        String temp=null;
        outer: for (String pre : openList) {
            int i = str.indexOf(pre);
            if(i==-1){
                continue outer;
            }
            i=i+pre.length();
            str=str.substring(i);//去掉头
            List<String> closeList = getString(str, close);
            for (String sub : closeList) {
                int dd = str.indexOf(sub);
                if(dd==-1){
                    continue;
                }
                temp=str;
                retList.add(str.substring(0, dd));
                temp=temp.substring(dd+sub.length());
                return temp;
            }
        }
        return temp;
    }
    public static  boolean isEmpyty(String str){
        if(null==str || str=="" || str.trim().length()==0){
            return true;
        }
        return false;
    }
    public static List<String> getString(String str,String open) {
        String[] split = open.split("\\*");
        List<String > list=new ArrayList<>();
        if(split.length==1){
            String pre=split[0];
            if(str.indexOf(pre)!=-1){
                list.add(pre);
            }
            return list;
        }
        if(split.length>=3){
            return list;
        }
        String s1 = split[0];
        String s2 = split[1];
        String temp=null;
        while (true){
            int i = str.indexOf(s1);
            if(i==-1){
                break;
            }
            int i2 = str.indexOf(s2);
            if(i2==-1){
                break;
            }
            if(i<i2){
                temp=str;
                list.add(str.substring(i,i2+s2.length()));
                str=temp.substring(i2+s2.length());
            }else {
                break;
            }
        }
        return list;
    }
}