整数数组中连续递增子序列转化问题
有一组数据 例如[1,3,8,17,18,19,20,50,60,72,73,74],把其中连续递增的整数子序列变为例如:17,18,19,20转化为17~20.最终整理后的打印结果为[1,3,8,17~19,50,60,72~74]这种形式,刚开始以为简单,但自己尝试了一些方法但效果不好,尤其是对于数据开头和结尾的数据处理的并不得当,所以看各路大神能否有好方法,在此表示感谢!
import java.util.ArrayList; import java.util.Iterator; import java.util.List; //有一组数据 例如[1,3,8,17,18,19,20,50,60,72,73,74], //[1,3,8,17~20,50,60,72~74]这种形式 public class Test { public static List<String> convert(int ...src) { int pre,loc,next; String strtmp="~"; List<Integer> desc=new ArrayList<Integer>(); List<String> res=new ArrayList<String>(); for(int s:src) { desc.add(s); } Iterator<Integer> itr=desc.iterator(); pre=itr.next(); loc=itr.next(); while(itr.hasNext()) { next=itr.next(); if(pre+1!=loc&&loc+1==next) { strtmp=pre+"\n"+loc; res.add(strtmp); } else if(pre+1==loc&&loc+1==next&&!strtmp.equals("~")) { strtmp="~"; res.add(strtmp); } else if(pre+1!=loc&&loc+1!=next) { strtmp=String.valueOf(pre); res.add(strtmp); } pre=loc; loc=next; } res.add(String.valueOf(loc)); return res; } public static void main(String[] args) { int[] src={1,3,8,17,18,19,20,50,60,72,73,74}; List<String> lis=convert(src); List<String> res=new ArrayList<String>(); String[] arr=new String[lis.size()]; for(int i=0;i<lis.size();i++) { arr[i]=lis.get(i); } for(int i=0;i<arr.length-2;i++) { if(arr[i+1].equals("~")) { res.add(arr[i]+"~"+arr[i+2]); i+=2; } else { res.add(arr[i]); } } Iterator<String> itr=res.iterator(); while(itr.hasNext()) { System.out.print(itr.next()+"\t"); } } }