以下为题目,代码和注释:
public class geshihua {
/*
问题:重新格式化电话号码
给你一个字符串形式的电话号码 number 。number 由数字、空格 ' '、和破折号 '-' 组成。
请你按下述方式重新格式化电话号码。
首先,删除 所有的空格和破折号。
其次,将数组从左到右 每 3 个一组 分块,直到 剩下 4 个或更少数字。剩下的数字将按下述规定再分块:
2 个数字:单个含 2 个数字的块。
3 个数字:单个含 3 个数字的块。
4 个数字:两个分别含 2 个数字的块。
最后用破折号将这些块连接起来。注意,重新格式化过程中 不应该 生成仅含 1 个数字的块,并且 最多 生成两个含 2 个数字的块。
返回格式化后的电话号码。
输入:number = "1-23-45 6"
输出:"123-456"
解释:数字是 "123456"
步骤 1:共有超过 4 个数字,所以先取 3 个数字分为一组。第 1 个块是 "123" 。
步骤 2:剩下 3 个数字,将它们放入单个含 3 个数字的块。第 2 个块是 "456" 。
连接这些块后得到 "123-456" 。
*/
public String reformatNumber(String number) {
String[] arr=new String[200];
String[] arr1=number.split("");//将电话号码存储到字符串中
String[] s1=new String[200];
int index=0;//设置索引
int j=0;
int i=0;
int k=0;
//将字符串抛去" "和"-",其余存入数组中
for(i=0;i<arr1.length;i++){
if(!arr1[i].equals(" ") & !arr1[i].equals("-")){
arr[index]=arr1[i];
index++;
}
}
//将正确的输出存入数组
//i用于计算循环次数和统计当前还剩几个数,k用于调用数组
for(i=index-1,k=0;i>=0;){
//如果长度大于4
if(i+1>4){
s1[j]=arr[k]+arr[k+1]+arr[k+2]+"-";
j++;
i=i-3;//数字减去三个
k=k+3;//数组往后移三个
//长度小于等于四
}else{
if(i+1==4){
s1[j]=arr[k]+arr[k+1]+"-"+arr[k+2]+arr[k+3];
j++;
i=i-4;//数字减去四个
k=k+4;//数组往后移四个
}else if(i+1==2){
s1[j]=arr[k]+arr[k+1];
j++;
i=i-2;//数字减去二个
k=k+2;//数组往后移二个
}else if(i+1==3){
s1[j]=arr[k]+arr[k+1]+arr[k+2];
j++;
i=i-3;//数字减去三个
k=k+3;//数组往后移三个
}
}
}
String s2="";
for(j=0;;j++){
if(s1[j]==null){
break;
}
s2=s2+s1[j];
}
return s2;
}
}