本题保让脱敏处埋前后的电诂号码的长度都是团区间|11,40]上的整数。
【例子】
示例 1:自测输入格式:1(3220)200-520
输入:"1(3220)200-520’
输出:“132--0520’
解释:11 个数字的电话号码,那意味着所有的数字都是本地号码。示例 2:自测输入格式:86-(010)20200526
输入:“86-(010)20200526’
输出:"+**-010--0526’解释:13 位数字,2 个数字是国家号码,另外 11 个数字是本地号码
public static void main(String[] args) {
// 调用 desensitizePhoneNumber 方法,打印脱敏后的电话号码
System.out.println("脱敏之后的结果是:" + desensitizePhoneNumber("1(3220)200-5*20"));
System.out.println("脱敏之后的结果是:" + desensitizePhoneNumber("86-(010)20200526"));
System.out.println("脱敏之后的结果是:" + desensitizePhoneNumber("6-(010)20200526"));
}
public static String desensitizePhoneNumber(String phoneNum) {
// 使用 replaceAll 方法将字符串中的非数字字符替换为空字符串
String phone = phoneNum.replaceAll("\\D+", "");
// 计算电话号码的长度
int length = phone.length();
// 检查电话号码的长度是否小于 11 或大于 40
if (length < 11 || length > 40) {
// 如果长度不符合要求,返回错误提示信息
return "phoneNum is error,please check!!";
}
// 截取电话号码的后 11 位到倒数第 8 位,并在其间插入"****"
String local = phone.substring(length - 11, length - 8) + "-****-";
// 如果电话号码长度为 11 位,则返回截取后的结果
if (length == 11) {
return local;
}
// 初始化结果字符串为"+"号
String res = "+";
// 循环遍历电话号码的前 11 位,在每个位置插入"*"号
for (int i = 0; i < length - 11; i++) {
// 在结果字符串中插入"*"号
res += "*";
}
// 将结果字符串与截取后的本地号码拼接起来
return res + "-" + local;
}
本题思路为:
11位和13位的电话号码后面的处理逻辑都是相同的
只需要区别对待前几位即可