给定一段开始字符串和一段结束字符串,然后用他们截取其他字符串,求出截取的字符串组成的集合,开始字符串和结束字符串需要支持通配符(只支持一个星号代表任意字符,并且星号只能在字符串中间)

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";


        List<String> midList = getMidList(str, open, close);
        List<String> midList2 = getMidList(str2, open2, close2);

        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);
        List<String> closeList = getString(str, close);
        if(!openList.isEmpty() && !closeList.isEmpty()) {
            String temp = null;
            outer:
            for (String pre : openList) {
                for (String sub : closeList) {
                    int i = str.indexOf(pre);
                    if (i == -1) {
                        continue outer;
                    }
                    i = i + pre.length();
                    str = str.substring(i);//去掉头
                    int dd = str.indexOf(sub);
                    if (dd == -1) {
                        continue;
                    }
                    temp = str;
                    retList.add(str.substring(0, dd));
                    str = temp.substring(dd + sub.length());
                    break outer;
                }

            }
        }
            while (true){
                if(null==str || retList.isEmpty()){
                    break;
                }
                openList = getString(str, open);
                closeList = getString(str, close);
                if(openList.isEmpty() || closeList.isEmpty()){
                    break;
                }
                String temp2=null;
                outer: for (String pre : openList) {
                    for (String sub : closeList) {
                        int i = str.indexOf(pre);
                        if(i==-1){
                            continue outer;
                        }
                        i=i+pre.length();
                        str=str.substring(i);//去掉头
                        int dd = str.indexOf(sub);
                        if(dd==-1){
                            continue;
                        }
                        temp2=str;
                        retList.add(str.substring(0, dd));
                        str=temp2.substring(dd+sub.length());
                    }

                }

            }

            return retList;

    }












    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;
            }
            temp=str;
            list.add(str.substring(i,i2+s2.length()));
            str=temp.substring(i2+s2.length());
        }

        return list;
    }





}

猜你喜欢

转载自www.cnblogs.com/yangxiaohui227/p/11344806.html