【发布时间】:2021-10-05 02:34:15
【问题描述】:
我想使用正则表达式部分屏蔽数据。这是输入:
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******
感谢您的帮助!
【问题讨论】:
-
您可以简单地将索引
i处的字符更改为数组[1,2,4,5,6,7,8,10,11,12,13,14]中每个索引的星号。 -
@CarySwoveland Java 中的字符串是不可变的,所以我们不能真正做到这一点。
-
@Tim,如何创建一个新字符串,其第 i 个字符是原始字符串中的第 i 个字符或星号,这取决于索引是否在我的第一条评论中的数组中?
-
Java 在优美简洁的字符串操作语法方面可能比 Ruby 或 Python 低很多。
-
@zozonenete 您应该检测模式的类型并通过映射器在类型到替换的正则表达式之间替换每种类型