使用Java屏蔽String数据的不同长度的一部分

时间:2016-02-29 07:05:01

标签: java string mask

我需要屏蔽我的应用程序的PII数据。 PII数据将是String格式和可变长度,因为它可能包括姓名,地址,邮件ID等。

所以我需要在记录它们之前屏蔽这些数据,它不应该是完整的掩码,如果字符串的长度小于或等于8个字符,那么用" XXX等掩盖前半部分。 "

如果长度大于8,则屏蔽字符串的第一个和最后一个部分,使得只有中间5个字符可见。 我知道我们可以使用java子字符串和迭代字符串来完成此操作,但想知道是否有任何其他简单的解决方案来解决这个问题。 提前致谢

2 个答案:

答案 0 :(得分:2)

如果你使用的是Apache Commons,你可以这样做

String maskChar = "*";

//number of characters to be masked
String maskString = StringUtils.repeat( maskChar, 4);

//string to be masked
String str = "FirstName";

//this will mask first 4 characters of the string
System.out.println( StringUtils.overlay(str, maskString, 0, 4) );

您可以在使用if else语句生成maskString之前检查字符串长度。

答案 1 :(得分:0)

你可以使用这个功能;根据您的需要改变一半的逻辑:

public static String maskedVariableString(String original)
    {
        String maskedString = null;
        if(original.length()<9)
        {
            int half = original.length()/2;
            StringBuilder sb =new StringBuilder("");
            for(int i=0;i<(original.length()-half);i++)
            {
                sb.append("X");
            }
            maskedString = original.replaceAll("\\b.*(\\d{"+half+"})", sb.toString()+"$1");

        }
        else
        {
            int maskLength = original.length()-5;
            int firstMaskLength = maskLength/2;
            int secondMaskLength = maskLength-firstMaskLength;

            StringBuilder sb =new StringBuilder("");
            for(int i=0;i<firstMaskLength;i++)
            {
                sb.append("X");
            }
            String firstMask = sb.toString();

            StringBuilder sb1 =new StringBuilder("");
            for(int i=0;i<secondMaskLength;i++)
            {
                sb1.append("X");
            }
            String secondMask = sb1.toString();

            maskedString = original.replaceAll("\\b(\\d{"+firstMaskLength+"})(\\d{5})(\\d{"+secondMaskLength+"})", firstMask+"$2"+secondMask);
        }
        return maskedString;
    }

说明:

  • ()对正则表达式进行分组,我们可以使用$来访问该组($ 1,$ 2,$ 3)。
  • \ b边界有助于检查我们是数字的开头(还有其他方法可以做到这一点,但这里也可以这样做。)
  • (\ d {+ half +})捕获(一半)数字到第1组。在else部分也是如此。