Java 用括号和空格屏蔽电话号码
我有一个电话号码屏蔽的方法。我需要用星星替换所有数字,最后4个除外。 样本输入为:+91(333)444-5678和+1(333)456-7890。输出应该是这样的: 但我的输出实际上是这样的: 这是我的代码:Java 用括号和空格屏蔽电话号码,java,regex,replaceall,Java,Regex,Replaceall,我有一个电话号码屏蔽的方法。我需要用星星替换所有数字,最后4个除外。 样本输入为:+91(333)444-5678和+1(333)456-7890。输出应该是这样的: 但我的输出实际上是这样的: 这是我的代码: public static String maskPhoneNumber(String inputPhoneNum){ return inputPhoneNum.replaceAll("\\(", "-") .replaceAll("\
public static String maskPhoneNumber(String inputPhoneNum){
return inputPhoneNum.replaceAll("\\(", "-")
.replaceAll("\\)", "-")
.replaceAll(" ", "-")
.replaceAll("\\d(?=(?:\\D*\\d){4})", "*");
}
我的方法适用于国家代码中的不同位数,但如果国家代码附近有括号(后面有三元组),而不是数字之间的空格,则会出现中断。
如果您能给我一些提示,告诉我如何改进我的方法,我将不胜感激 目前,您将每个单独的空格,
(
和)
替换为-
。您需要用1个连字符替换所有连续出现的情况
使用
看
+91(333)444-5678
变为+***-***-***-***-5678
,+1(333)456-7890
变为+*-***-***-***-7890
[()\s]+
模式匹配一个或多个(+
)连续的(
,)
或空白字符。请参阅和。语言本身有一个专门的API(以附录替换的形式)
但如果没有国家代码,情况又如何呢?这是可能的。例如,对于(333)456-7890,这个正则表达式将在开头加一个破折号。@Cassie:456-7890的预期结果是什么<代码>***-***-7890
?检查一下,谢谢!这对我帮助很大。@Eugene如果你指的是附件替换
,它已经过时了,是的,我们可以修改当前的OP解决方案以使用该方法,但它在这里并没有真正的帮助,可能会变得更“棘手”。请看,您的解决方案没有提供预期的结果。@Eugene我没有否决它,请注意,如果您想用1个正则表达式解决它,它将相当长,有一些替换和捕获组。可能一文不值。
public static String maskPhoneNumber(String inputPhoneNum){
return inputPhoneNum.replaceAll("[()\\s]+", "-")
.replaceAll("\\d(?=(?:\\D*\\d){4})", "*");
}
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());