java - 替换句子中特定长度的数字

时间:2018-03-09 11:16:00

标签: java regex

我希望将一个16位数字的前12位转换为星号。

最后的 4位数应该是可见的

示例输入:

String test = "test/1234567890121123/121/test";
String test2 = "hey: 1234567890123456";

预期输出:

String test = "test/************1123/121/test";
String test2 = "hey: ************3456";

注意:输入是动态的

2 个答案:

答案 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)。该模式的最后一部分是正前瞻,它断言但不消耗。由于前瞻实际上没有消耗,因此匹配的内容不会受到替换的影响。

Demo

答案 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