掩码 Phone 带括号和空格的数字 Java
Mask Phone number with brackets and spaces Java
我有一个 phone 号码屏蔽的方法。我需要用星星替换除最后 4 位以外的所有数字。
示例输入为:+91 (333) 444-5678 和 +1(333) 456 -7890。输出应该是这样的:
但我的输出实际上是这样的:
所以这是我的代码:
public static String maskPhoneNumber(String inputPhoneNum){
return inputPhoneNum.replaceAll("\(", "-")
.replaceAll("\)", "-")
.replaceAll(" ", "-")
.replaceAll("\d(?=(?:\D*\d){4})", "*");
}
我的方法适用于国家代码中不同位数的数字,但在数字之间不是 space 而是国家代码附近的括号(后面是三元组)的情况下,它会中断。
如果能提供一些关于如何改进我的方法的提示,我将不胜感激!
目前,您将每个 space、(
和 )
替换为 -
。您需要用 1 个连字符替换所有连续出现的内容。
使用
public static String maskPhoneNumber(String inputPhoneNum){
return inputPhoneNum.replaceAll("[()\s]+", "-")
.replaceAll("\d(?=(?:\D*\d){4})", "*");
}
参见 this Java demo。
+91 (333) 444-5678
变成+**-***-***-5678
,+1(333) 456-7890
变成+*-***-***-7890
。
[()\s]+
模式匹配 1 个或多个 (+
) 个连续的 (
、)
或 whitespace 个字符。参见 the "normalization" step regex demo and the final step demo。
语言本身有一个专用的 API(以 appendReplacement
的形式)
String test = "+91 (333) 444-5678";
test = test.replaceAll("[()\s]+", "-");
Pattern p = Pattern.compile("\d+(?!\d*$)");
Matcher m = p.matcher(test);
StringBuilder sb = new StringBuilder(); // +**-***-***-5678
for (; m.find();) {
m.appendReplacement(sb, m.group().replaceAll(".", "*"));
}
m.appendTail(sb);
System.out.println(sb.toString());
我有一个 phone 号码屏蔽的方法。我需要用星星替换除最后 4 位以外的所有数字。 示例输入为:+91 (333) 444-5678 和 +1(333) 456 -7890。输出应该是这样的:
但我的输出实际上是这样的:
所以这是我的代码:
public static String maskPhoneNumber(String inputPhoneNum){
return inputPhoneNum.replaceAll("\(", "-")
.replaceAll("\)", "-")
.replaceAll(" ", "-")
.replaceAll("\d(?=(?:\D*\d){4})", "*");
}
我的方法适用于国家代码中不同位数的数字,但在数字之间不是 space 而是国家代码附近的括号(后面是三元组)的情况下,它会中断。 如果能提供一些关于如何改进我的方法的提示,我将不胜感激!
目前,您将每个 space、(
和 )
替换为 -
。您需要用 1 个连字符替换所有连续出现的内容。
使用
public static String maskPhoneNumber(String inputPhoneNum){
return inputPhoneNum.replaceAll("[()\s]+", "-")
.replaceAll("\d(?=(?:\D*\d){4})", "*");
}
参见 this Java demo。
+91 (333) 444-5678
变成+**-***-***-5678
,+1(333) 456-7890
变成+*-***-***-7890
。
[()\s]+
模式匹配 1 个或多个 (+
) 个连续的 (
、)
或 whitespace 个字符。参见 the "normalization" step regex demo and the final step demo。
语言本身有一个专用的 API(以 appendReplacement
的形式)
String test = "+91 (333) 444-5678";
test = test.replaceAll("[()\s]+", "-");
Pattern p = Pattern.compile("\d+(?!\d*$)");
Matcher m = p.matcher(test);
StringBuilder sb = new StringBuilder(); // +**-***-***-5678
for (; m.find();) {
m.appendReplacement(sb, m.group().replaceAll(".", "*"));
}
m.appendTail(sb);
System.out.println(sb.toString());