整数数组中连续递增子序列转化问题
有一组数据 例如[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");
}
}
}
