遍历字符串,把所有数字挑选出来,存储在StringBuilder sb中
再创建一个StringBuilder res,用于存储最终要返回的结果
题目要求的是,每3个数字分为一组,直到剩下4个或更少的数字,剩下的数字按照下述规定再分块:
找规律
class Solution {
public String reformatNumber(String number) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < number.length(); i++) {
if (number.charAt(i) >= '0' && number.charAt(i) <= '9') {
sb.append(number.charAt(i));
}
}
StringBuilder res = new StringBuilder();
int i;
if (sb.length() % 3 == 1) {
i = 0;
while (i < sb.length() - 4) {
res.append(sb.substring(i, i + 3)).append('-');
i += 3;
}
while (i < sb.length()) {
res.append(sb.substring(i, i + 2)).append('-');
i += 2;
}
res.deleteCharAt(res.length() - 1);
} else if (sb.length() % 3 == 2) {
i = 0;
while (i < sb.length() - 2) {
res.append(sb.substring(i, i + 3)).append('-');
i += 3;
}
res.append(sb.substring(i, i + 2));
} else {
i = 0;
while (i < sb.length()) {
res.append(sb.substring(i, i + 3)).append('-');
i += 3;
}
res.deleteCharAt(res.length() - 1);
}
return res.toString();
}
}
首先对给定的字符串number进行一次遍历,找出所有的数字,并记录在字符串digits中。如果使用的语言不支持可修改的字符串,也可以记录再数组中。
随后,对digits进行一次遍历。在遍历的过程中,可以存储剩余的数字数量n以及当前遍历到的字符位置pt:
还需要在不同的块之间添加破折号
class Solution {
public String reformatNumber(String number) {
StringBuilder digits = new StringBuilder();
char num;
for (int i = 0; i < number.length(); i++) {
num = number.charAt(i);
if (num >= '0' && num <= '9') {
digits.append(num);
}
}
int len = digits.length();
int pos = 0;
StringBuilder res = new StringBuilder();
while (len > 4) {
res.append(digits.substring(pos, pos + 3)).append('-');
pos += 3;
len -= 3;
}
if (len == 4) {
res.append(digits.substring(pos, pos + 2)).append('-')
.append(digits.substring(pos + 2, pos + 4));
} else {
res.append(digits.substring(pos, pos + len));
}
return res.toString();
}
}