// 往代表号码段的字符串里添加新号码段,求结果串。 
// codes: 代表号码段的字符串,格式如:5-20,30-50,78-90 
// code: 新号码段,格式如:22-29 
// return: 结果串,要注意号码段合并处理,如以上结果应该为: 
// 5-20,22-50,78-90 而不是:5-20,22-29,30-50,78-90 
// 不用考虑号码重复问题,即以上串不会添加10-40 
public String getString(String codes, String code) 


解决方案 »

  1.   

    import java.util.*;
    // 往代表号码段的字符串里添加新号码段,求结果串。 
    // codes: 代表号码段的字符串,格式如:5-20,30-50,78-90 
    // code: 新号码段,格式如:22-29 
    // return: 结果串,要注意号码段合并处理,如以上结果应该为: 
    // 5-20,22-50,78-90 而不是:5-20,22-29,30-50,78-90 
    // 不用考虑号码重复问题,即以上串不会添加10-40 
    public class Test{
    public static String getString(String codes, String code){
    String[] strs=codes.split(",\\s*");
    int[][] codeSection=new int[strs.length][];
    for(int i=0;i<strs.length;i++){
    String[] x=strs[i].split("-");
    codeSection[i]=new int[x.length];
    for(int j=0;j<x.length;j++){
    codeSection[i][j]=Integer.parseInt(x[j]);
    }
    }
    int start=Integer.parseInt(code.split("-")[0]);
    int end=Integer.parseInt(code.split("-")[1]);
    int index=0;
    while(index<strs.length&&start>codeSection[index][0]){
    index++;
    }
    int insert=-1;
    if(index==0){
    if(end<codeSection[0][0]){
    insert=0;
    }else if(end<codeSection[1][0]-1){
    strs[0]=String.valueOf(start)+"-"+String.valueOf(Math.max(end,codeSection[0][1]));
    }

    }else if(index==strs.length){
    insert=strs.length;
    }else{
    if(end<codeSection[index][0]-1){
    if(start<=codeSection[index-1][1]+1){
    strs[index-1]=String.valueOf(codeSection[index-1][0])+"-"+String.valueOf(Math.max(end,codeSection[index][1]));
    }else{
    insert=index;
    }
    }else if(end<=codeSection[index][1]){
    strs[index]=String.valueOf(start)+"-"+String.valueOf(codeSection[index][1]);
    }else if(index+1<strs.length&&end<codeSection[index+1][0]){
    strs[index]=String.valueOf(start)+"-"+String.valueOf(end);
    }else{ 
    //do nothing.
    }
    }
    if(insert==-1){
    String result=Arrays.toString(strs);
    return result.substring(1,result.length()-1);
    }else{
    StringBuilder sb=new StringBuilder();
    for(int i=0;i<index;i++){
    sb.append(strs[i]+",");
    }
    sb.append(String.valueOf(start)+"-"+String.valueOf(end)+",");
    for(int i=index;i<strs.length;i++){
    sb.append(strs[i]+",");
    }
    return sb.toString().substring(0,sb.length()-1);
    }

    }
    public static void main(String[] args){
    String codes="5-20,30-50,78-90";
    String[] testCodes={"1-2","3-21","5-10","3-25","3-35","22-29","100-120"};
    for(String str:testCodes){
    System.out.println("codes=  "+codes+"\tcode= "+str);
    System.out.println("result= "+getString(codes,str)+"\n");
    }
    }

    } 测试结果如下:
    F:\java>java Test
    codes=  5-20,30-50,78-90        code= 1-2
    result= 1-2,5-20,30-50,78-90codes=  5-20,30-50,78-90        code= 3-21
    result= 3-21, 30-50, 78-90codes=  5-20,30-50,78-90        code= 5-10
    result= 5-20, 30-50, 78-90codes=  5-20,30-50,78-90        code= 3-25
    result= 3-25, 30-50, 78-90codes=  5-20,30-50,78-90        code= 3-35
    result= 5-20, 30-50, 78-90codes=  5-20,30-50,78-90        code= 22-29
    result= 5-20, 22-50, 78-90codes=  5-20,30-50,78-90        code= 100-120
    result= 5-20,30-50,78-90,100-120可能还有没有想到的地方,现在有事,晚上回来再看看.