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

Ken*_*thC 0 java regex

我想一个16位数字的前12位数字转换为星号.

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

输入示例:

String test = "test/1234567890121123/121/test";
String test2 = "hey: 1234567890123456";
Run Code Online (Sandbox Code Playgroud)

预期产量:

String test = "test/************1123/121/test";
String test2 = "hey: ************3456";
Run Code Online (Sandbox Code Playgroud)

注意:输入是动态的

Tim*_*sen 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);
Run Code Online (Sandbox Code Playgroud)

这里的技巧是手术替换16位数字开头的12位数字.为此,我们可以搜索\b\d{12}(?=\d{4}\b).该模式的最后一部分是一个积极的先行,它断言但不消耗.由于前瞻实际上并不消耗,因此匹配的内容不会受到替换的影响.

演示