我希望将一个16位数字的前12位转换为星号。
最后的 4位数应该是可见的。
示例输入:
String test = "test/1234567890121123/121/test";
String test2 = "hey: 1234567890123456";
预期输出:
String test = "test/************1123/121/test";
String test2 = "hey: ************3456";
注意:输入是动态的
答案 0 :(得分:6)
尝试此选项:
String test = "test/1234567890121123/121/test";
String test2 = "hey: 1234567890123456";
test = test.replaceAll("\\b\\d{12}(?=\\d{4}\\b)", "************"); // 12 *'s
System.out.println(test);
这里的技巧是手术替换16位数字开头的12位数字。为此,我们可以搜索\b\d{12}(?=\d{4}\b)
。该模式的最后一部分是正前瞻,它断言但不消耗。由于前瞻实际上没有消耗,因此匹配的内容不会受到替换的影响。
答案 1 :(得分:1)
爪哇:
test.replaceAll ("([0-9]{12})([0-9]{4})", "************$2/")
如果只有完全正确长度(16)的表达式匹配,则不再长于:
-> "0123456789012345".replaceAll ("\\b([0-9]{12})([0-9]{4})\\b", "************$2/");
| Expression value is: "************2345/"
| assigned to temporary variable $18 of type String
失败,太久了:
-> "01234567890123456".replaceAll ("\\b([0-9]{12})([0-9]{4})\\b", "************$2/");
| Expression value is: "01234567890123456"
| assigned to temporary variable $19 of type String