替换Java String中的特定长度子字符串

时间:2014-12-09 14:22:17

标签: java regex

我需要解析一个字符串并屏蔽所有社会保障代码。 SSN总是正好是9位数。就我的目的而言,如果我看到一个9位数的子串,我可以假设它是SSN或者至少假设它是安全的。但是,我不想屏蔽任何小于或大于9位的数字子字符串。

所以,这段代码让我接近,但它找到了10位数字字符串,并掩盖了前9位的数字。

String masked = myString.replaceAll( "\\d{9}", "XXXXXXXXX" );
  • 输入:cat123456789dog
  • 输出:catXXXXXXXXXdog

  • 输入:cat1234567890dog

  • 输出:catXXXXXXXXX0dog
  • 期望输出:cat1234567890dog

无论如何使用String replaceAll方法,或者使用其他方法来完成我想要的工作?

1 个答案:

答案 0 :(得分:4)

你可以使用环顾四周来确保它的长度为

(?<!\\d)\\d{9}(?!\\d)

Regex Example

  • (?<!\\d)负面看后面。确保长度为9的数字不是由数字

  • 表示
  • (?!\\d)负面展望未来。确保数字后面没有数字

  • 环顾四周将数字的总长度限制为9

将caputre group用作

String masked = myString.replaceAll( "(\\D)\\d{9}(\\D)", "$1XXXXXXXXX$2" );