java - 使用正则表达式部分屏蔽一组数字的数据
问题描述
我想使用正则表达式部分屏蔽数据。这是输入:
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******
谢谢你的帮助 !
解决方案
我们可以使用以下正则表达式替换方法:
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
}
推荐阅读
- javascript - 强制安装 npm 包依赖项不起作用
- excel - 将保存的文件附加到 Outlook 电子邮件的 VBA 代码
- javascript - 为什么我的代码可以在除 Safari 之外的所有浏览器中播放视频?
- python - 标记最后一组项目数据框
- r - ggplot2中的轴偏移
- git - 批处理文件中的 Git 命令通过 VSTS 运行并引发错误
- node.js - 如何阻止 npm 编译 Visual Studio 代码中的每个按键?
- android - Android - 应用程序上下文可以解决内存泄漏吗?
- laravel - 如何使用数据透视表从数据库中获取产品并在 laravel 中对检索到的产品运行另一个查询?
- python - 支持嵌入式终端跨平台的编辑器?