我需要解析一个字符串并屏蔽所有社会保障代码。 SSN总是正好是9位数。就我的目的而言,如果我看到一个9位数的子串,我可以假设它是SSN或者至少假设它是安全的。但是,我不想屏蔽任何小于或大于9位的数字子字符串。
所以,这段代码让我接近,但它找到了10位数字字符串,并掩盖了前9位的数字。
String masked = myString.replaceAll( "\\d{9}", "XXXXXXXXX" );
cat123456789dog
输出:catXXXXXXXXXdog
输入:cat1234567890dog
catXXXXXXXXX0dog
cat1234567890dog
无论如何使用String replaceAll
方法,或者使用其他方法来完成我想要的工作?
答案 0 :(得分:4)
你可以使用环顾四周来确保它的长度为
(?<!\\d)\\d{9}(?!\\d)
(?<!\\d)
负面看后面。确保长度为9
的数字不是由数字
(?!\\d)
负面展望未来。确保数字后面没有数字
环顾四周将数字的总长度限制为9
或强>
将caputre group用作
String masked = myString.replaceAll( "(\\D)\\d{9}(\\D)", "$1XXXXXXXXX$2" );