我的尝试:
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);