Java 中屏蔽除最后 4 个字符之外的字符串

培训教学 潘老师 8个月前 (09-14) 168 ℃ (0) 扫码查看

学习使用掩码字符来掩码字符串或数字,除非在末尾显示最后 4 个字符。这种屏蔽通常出现在金融应用程序中,我们希望屏蔽帐号或 SSN 以避免显示 NPI(非公开个人信息)数据。

如果我们需要屏蔽日志文件中的数据,请考虑使用logback 中内置的屏蔽功能。

1. 使用正则表达式

屏蔽字符串(最后 N 位数字除外)的最简单解决方案是使用正则表达式和String.replaceAll()函数。ReplaceAll ()函数用给定的替换字符串替换每个匹配的子字符串。

在以下代码中,正则表达式匹配字符串中除最后 4 个字符之外的每个字符。我们可以将此正则表达式应用于任意数量的字符。注意,如果字符串长度小于4,则原字符串保持不变。

public static String maskString(String input) {

  if(input == null) {
    return "NULL";
  }
  return input.replaceAll(".(?=.{4})", "x");
}

让我们测试一下上面的函数。

Assertions.assertEquals("xxxxx6789", maskString("123456789"));
Assertions.assertEquals("6789", maskString("6789"));
Assertions.assertEquals("789", maskString("789"));
Assertions.assertEquals("", maskString("")); //empty string
Assertions.assertEquals("NULL", maskString(null)); //null

如果我们想屏蔽格式化字符串,我们可以相应地调整正则表达式。例如,以下函数将仅转换格式化字符串中除最后 4 个字符之外的字母数字字符。因此,如果字符串是格式化的帐号或 SSN,它会跳过格式化字符串中的连字符

public static String maskString(String input) {

  if(input == null) {
    return "NULL";
  }
  return input.replaceAll("[^-](?=.{4})", "x");
}

让我们也测试一下格式化字符串的上述函数。

Assertions.assertEquals("xxx-xxx-7890", maskString("123-456-7890"));
Assertions.assertEquals("xxxxx6789", maskString("123456789"));

2. 将最后 4 个字符附加到自定义屏蔽字符串

在此方法中,我们可以自由创建仅包含任何格式的掩码字符的自定义掩码字符串。随后,我们将输入字符串的最后 4 个字符附加到掩码字符串中。

在下面的示例中,我们使用String.repeat()方法通过重复指定的次数来创建字符串。然后我们附加输入字符串的最后 4 个字符。

public static String maskString(String input) {
  if(input == null) {
    return "NULL";
  }
  int maskLength = input.length() - 4;
  if (maskLength <= 0)
    return input; //string less than 4 chars

  return "x".repeat(maskLength) + input.substring(maskLength);
}

让我们测试一下上面的函数。

Assertions.assertEquals("xxxxx6789", maskString("123456789"));
Assertions.assertEquals("789", maskString("789"));
Assertions.assertEquals("", maskString("")); //empty string
Assertions.assertEquals("NULL", maskString(null)); //null

请注意,对于格式化字符串,我们必须根据要求创建自定义格式化掩码字符串。

三、结论

在本 Java 字符串教程中,我们学习了使用指定的掩码字符来掩码给定的字符串(输入字符串的最后 4 个字符除外)。我们学习了使用正则表达式和创建自定义掩码来掩码字符串。


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/teach/9057.html
喜欢 (0)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】