我的尝试:

StringBuffer bf = new StringBuffer();
Pattern emailPattern = Pattern.compile("(?<=.)(.*?)(?=@)");
Matcher m = emailPattern.matcher("[email protected]");
while(m.find()){
  m.appendReplacement(bf, "*");
}
return bf.toString();


问题是此代码返回“ a*@gmail.com”,但我希望它返回“ a*****@gmail.com”,其中“ *”的数量是替换字符的数量。

谢谢。

最佳答案

使用该模式,您可以改为以下方式:

String obfuscate = emailPattern.matcher(email).replaceAll(
    m -> "*".repeat(m.group().length()));


(来自Java 11的String.repeat,来自Java 9的Matcher.replaceAll)

使用早期版本的Java:

while(m.find()) {
    char[] replace = new char[m.group().length()];
    Arrays.fill(replace, '*');
    m.appendReplacement(bf, new String(replace));
}
m.appendTail(bf);

10-06 01:21