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
今日推荐
周排行