/**
* @Title: getSimpleNum
* @author 代长亚
* @Description: TODO(得到省略数字,例如5-10,1,2,2,3,4 返回 1-4 -1-2,3-5 返回 -1-5 -1-1,2,3,4-6 返回-1-6)
* @param str
* @return String 返回类型
* @throws
* @date 2011-3-25 下午03:42:13
*/
public static String getSimpleNum(String str){
//boolean orderFlag = true ; // 字符串 数字顺序 true 正序 1,2 false 反序 5,4
StringBuffer tempStr = new StringBuffer();
List<String> list = new ArrayList<String>();
List<Integer> listNum = new ArrayList<Integer>();
StringTokenizer sker = new StringTokenizer(str.replaceAll( " ", ""),",",true);
while(sker.hasMoreElements()){
list.add(sker.nextToken());
}
for(int i=0;i<list.size();i++){
if(list.get(i).equals(",")){
list.remove(i);
}
}
for(int i=0;i<list.size();i++){
if(!isInt(list.get(i))){
String tstr = "";
int j = 1;
if(null!=list.get(i)&&list.get(i).length()>1&&list.get(i).charAt(0)=='-'){
tstr = list.get(i).substring(1);
j = 0;
}else{
tstr = list.get(i);
}
sker = new StringTokenizer(tstr.replaceAll( " ", ""),"-",true);
if(sker.countTokens()==1)
break;
while(sker.hasMoreElements()){
if(j==0)
list.add("-"+sker.nextToken());
else{
list.add(sker.nextToken());
}
j++;
}
list.remove(i);
i--;
}
}
if(null!=list&&list.size()>3){
for(int i=0;i<list.size();i++){
if(list.get(i).equals(",")){
list.remove(i);
}
}
for(int i=0;i<list.size();i++){ //重写规整字符串中的所有数字,或者可能有的数字
if(list.get(i).equals("-")&&i!=0){
int startNum = 0;
int endNum= 0 ;
if(isInt(list.get(i-1))){
startNum = Integer.parseInt(list.get(i-1));
}else{
return str;
}
if((i+1)<=list.size()&&isInt(list.get(i+1))){
endNum = Integer.parseInt(list.get(i+1));
}else{
return str;
}
if(startNum<endNum){
list.remove(i);
for(int k=startNum;k<endNum-1;k++){ // k+1!=0 去除 没有零层
list.add(i+(k-startNum),String.valueOf(k+1));
}
}
}
}
for(int i=0;i<list.size();i++){ //判断是不是数字
if(isInt(list.get(i))){
listNum.add(Integer.parseInt(list.get(i)));
}else{
return str;
}
}
HashSet<Integer> hs = new HashSet<Integer>(listNum);
Iterator<Integer> next = hs.iterator();
listNum = new ArrayList<Integer>();
while(next.hasNext()){ //去重
listNum.add(next.next());
}
Collections.sort(listNum,new NumComparator(true)); //排序
tempStr.append(listNum.get(0));
boolean tempFlag = false;
int startNum = listNum.get(0);
for(int i=1;i<listNum.size();i++){
if(i+1<listNum.size()&&listNum.get(i)-listNum.get(i-1)==1&&listNum.get(i+1)-listNum.get(i)==1){ //判断数字是不是递增
tempFlag = true;
}else{
if(listNum.get(i)-startNum>1&&tempFlag == true)
tempStr.append("-"+listNum.get(i));
else if(listNum.get(i)-startNum>1&&tempFlag == false)
tempStr.append(","+listNum.get(i));
else if(listNum.get(i)-startNum==1)
tempStr.append(","+listNum.get(i));
tempFlag = false;
}
}
}else
return str;
return tempStr.toString();
}