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

标签 java string masking

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

例如

Number:"S1234567B"

结果

Number :"XXXXX567B

谢谢大家

最佳答案

解决方案一

你可以用正则表达式来做。
这是最短的解决方案。

static String mask(String input) {
    return input.replaceAll(".(?=.{4})", "X");
}

正则表达式匹配后跟 (zero-width positive lookahead) 至少 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);
}

1) 比使用 StringBuilder 更好。


解决方案3

您可以使用 repeat​(int count) 来做到这一点在 Java 11 中添加到 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);
}

关于java - 如何使用参数屏蔽 Java 中除最后 4 个字符以外的所有字符串字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58361766/

相关文章:

c# - 在 C# 中将字符串转换为 double

python - Otsu 掩膜内阈值化

java - Java中错误报告的正确方法?

java - 我怎样才能找到Java中数组的最小覆盖前缀?

java - Java Queue 接口(interface)中的方法之间有什么区别?

image - 如何在 SVG 中控制从两个图像创建的图像蒙版输出的不透明度?

javascript - 移动网站表单中的输入屏蔽文本框不起作用

java - 没有为 feign 客户端找到类型类 kotlin.Unit 的后备实例

c# - 如何将包含十六进制对的字符串转换为字节?

只返回独特的词