// 往代表号码段的字符串里添加新号码段,求结果串。
// 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)
{
}
// 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)
{
}
// 往代表号码段的字符串里添加新号码段,求结果串。
// 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可能还有没有想到的地方,现在有事,晚上回来再看看.