重新格式化电话号码

题解方法

  • 字符串

字符串

  • 正则替换预处理

  • 前面的数字分组处理,特殊处理剩余的数字

  • 当余数为 1 时,需要与前一组数字合并

  • 当余数为 2 时,单组组成一组

  • 当余数为 0 时,需要删除末尾多余的 -

核心代码

正则替换

1
number = number.replaceAll("[\\s-]", "");

字符串

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// 剩下的数字个数
int remain = n % 3;
int group = n / 3;
// 余数为1,需要与前面的一组合并
if (remain == 1) {
group--;
remain += 3;
}

StringBuilder sb = new StringBuilder();

for (int i = 0; i < group; i++) {
sb.append(number, i * 3, i * 3 + 3);
sb.append("-");
}

if (remain == 2) {
sb.append(number, n - 2, n);
}
else if (remain == 4) {
sb.append(number, n - 4, n - 2);
sb.append("-");
sb.append(number, n - 2, n);
}
// 余数为 0,没有剩下的数字,需要去掉最后一个 -
else {
sb.deleteCharAt(sb.length() - 1);
}

题目来源

1694. 重新格式化电话号码 - 力扣(LeetCode)