如何使用参数屏蔽 Java 中除最后 4 个字符之外的所有字符串字符?

Bin*_*uan 4 java string masking

我想知道如何屏蔽除最后 4 个字符串之外的任意数量的字符串字符。我想使用“X”屏蔽所有字符串

例如

Number:"S1234567B"
Run Code Online (Sandbox Code Playgroud)

结果

Number :"XXXXX567B
Run Code Online (Sandbox Code Playgroud)

谢谢你们

And*_*eas 8

解决方案1

您可以使用正则表达式来完成。
这是最短的解决方案。

static String mask(String input) {
    return input.replaceAll(".(?=.{4})", "X");
}
Run Code Online (Sandbox Code Playgroud)

正则表达式匹配.后跟(零宽度正向前瞻)至少 4 个字符 ( (?=.{4})) 的任何单个字符 ( )。用 . 替换每个这样的单个字符X


解决方案2

您可以通过获取char[]1、更新它并构建一个新字符串来实现。
这是最快的解决方案,并且使用最少的内存。

static String mask(String input) {
    if (input.length() <= 4)
        return input; // Nothing to mask
    char[] buf = input.toCharArray();
    Arrays.fill(buf, 0, buf.length - 4, 'X');
    return new String(buf);
}
Run Code Online (Sandbox Code Playgroud)

1) 比使用StringBuilder.


解决方案3

您可以使用Java 11 中repeat?(int count)添加的方法来String完成。
这可能是最容易理解的解决方案。

static String mask(String input) {
    int maskLen = input.length() - 4;
    if (maskLen <= 0)
        return input; // Nothing to mask
    return "X".repeat(maskLen) + input.substring(maskLen);
}
Run Code Online (Sandbox Code Playgroud)


小智 0

您可以在 java 的帮助下做到这一点StringBuilder,如下所示,

String value = "S1234567B";
String formattedString = new StringBuilder(value)
    .replace(0, value.length() - 4, new String(new char[value.length() - 4]).replace("\0", "x")).toString();
System.out.println(formattedString);
Run Code Online (Sandbox Code Playgroud)