Java 要替换前4个字符的正则表达式

Java 要替换前4个字符的正则表达式,java,regex,java-11,Java,Regex,Java 11,我试图编写一个正则表达式,用*s替换字符串的前4个字符 例如,对于123456输入,预期输出为*****56 如果输入长度小于4,则仅返回*s 例如,如果输入是123,则返回值必须是***,这是一个简单的解决方案,使用截至。不需要正则表达式 static String hideFirst(String string, int size) { return size < string.length() ? // if string is lon

我试图编写一个正则表达式,用
*
s替换字符串的前4个字符

例如,对于
123456
输入,预期输出为
*****56

如果输入长度小于4,则仅返回
*
s


例如,如果输入是
123
,则返回值必须是
***

,这是一个简单的解决方案,使用截至。不需要正则表达式

static String hideFirst(String string, int size) {
    return size < string.length() ?                     // if string is longer than size
            "*".repeat(size) + string.substring(size) : // ... replace the part
            "*".repeat(string.length());                // ... or replace the whole
}
  • 您可能希望将星号(或任何)字符传递给该方法以获得更多控制
  • 您可能希望处理
    null
    (返回
    null
    /抛出NPE/抛出自定义异常…)
  • 对于较低版本的Java,需要重复字符串

您可以尝试使用下面的正则表达式来捕获前4个字符

(.{0,4})(.*)
现在,您可以使用Pattern、Matcher和String类来实现所需的功能

Pattern pattern = Pattern.compile("(.{0,4})(.*)");
Matcher matcher = pattern.matcher("123456");

if (matcher.matches()) {
    String masked = matcher.group(1).replaceAll(".", "*");
    String result = matcher.replaceFirst(masked + "$2");

    System.out.println(result);
    // 123456 -> ****56
    // 123 -> ***
}
简单使用


String masked=String.replaceAll(“(?但是为什么您需要一个正则表达式?使用正则表达式,您可以在之前检查不超过x个字符:这不是所选答案的副本@WiktorStribiżew@bobblebubble,除非你能解释为什么正则表达式是你问题的关键部分,或者以其他方式解释它的意义不同,否则它是重复的。请阅读。
Pattern pattern = Pattern.compile("(.{0,4})(.*)");
Matcher matcher = pattern.matcher("123456");

if (matcher.matches()) {
    String masked = matcher.group(1).replaceAll(".", "*");
    String result = matcher.replaceFirst(masked + "$2");

    System.out.println(result);
    // 123456 -> ****56
    // 123 -> ***
}