首页 > 解决方案 > 使用正则表达式部分屏蔽一组数字的数据

问题描述

我想使用正则表达式部分屏蔽数据。这是输入:

123-12345-1234567

这是我想要的输出:

1**-*****-*****67

我知道如何替换最后一组,但我不知道如何替换其余数据。

String s = "123-12345-1234567";
System.out.println(s.replaceAll("\\d(?=\\d{2})", "*")); // output is *23-***45-*****67

另外,我只想使用正则表达式,因为我有不同类型的数据,所以不同类型的掩码。我不想为每种类型的数据创建函数。

例如 :

AAAAAAAAA // becomes ********AA

12334567 // becomes 123******

谢谢你的帮助 !

标签: javaregex

解决方案


我们可以使用以下正则表达式替换方法:

String input = "123-12345-1234567";
String output = input.substring(0, 1) +
                input.substring(1, input.length()-2).replaceAll("\\d", "*") +
                input.substring(input.length()-2);
System.out.println(output);  // 1**-*****-*****67

在这里,我们将第一个数字连接在一起,然后是中间部分,所有数字都替换为*,以及最后两个数字。

编辑:一个纯粹的正则表达式解决方案,但是,它比上面的代码行更多,并且性能可能较低。

String input = "123-12345-1234567";
String pattern = "^(\\d)(.*)(\\d{2})$";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(input);
if (m.find()) {
    String output = m.group(1) + m.group(2).replaceAll("\\d", "*") + m.group(3);
    System.out.println(output);  // 1**-*****-*****67
}

推荐阅读