要求如下:Input: rajani@gmail.comOutput: r****i@*****.com我在两个正则表达式下面尝试过,但是我无法屏蔽gmail(域名)。请帮助我。String masked_email_Address2=email_Address.replaceAll("(?<=.{1}).(?=[^@]*?.@)", "*");输出为 r****i@gmail.com我对此进行了堆栈溢出搜索,得到了以下正则表达式,但未产生正确的结果:String masked_email_Address1=email_Address.replaceAll("\\b(\\w)[^@]+@\\S+(\\.[^\\s.]+)", "$1***@****$2");收到的输出为:r***@****.com-R&@之间缺少一颗星(*)。
3 回答
慕码人2483693
TA贡献1860条经验 获得超9个赞
我开始尝试像以前一样使用单线来执行此操作String#replaceAll
,但后来放弃了,因为不支持可变长度的lookbehinds,并且我无法提出一种不使用它们的模式。
相反,请尝试仅使用格式模式匹配器:
String email = "rajani@gmail.com";String pattern = "([^@]+)@(.*)\\.(.*)";Pattern r = Pattern.compile(pattern);Matcher m = r.matcher(email);if (m.find( )) { StringBuilder sb = new StringBuilder(""); sb.append(m.group(1).charAt(0)); sb.append(m.group(1).substring(1).replaceAll(".", "*")); sb.append("@"); sb.append(m.group(2).replaceAll(".", "*")); sb.append(".").append(m.group(3)); System.out.println(sb);}
演示版
这看起来像很多代码,可以在电子邮件地址上执行相对较小的格式化工作。如果愿意,可以将此代码放入实用程序方法中,然后在调用该方法时仍可以通过单行代码获得屏蔽效果。
慕妹3242003
TA贡献1824条经验 获得超6个赞
怎么样:
String masked_email_Address2=email_Address.replaceAll("(.)?[^@]*([^@])@\\S+(\\.[^\\s.]+)?", "$1****$2@****$3");
只要您的地址长度超过1个字符,此方法就可以使用。
叮当猫咪
TA贡献1776条经验 获得超12个赞
试试这个:
int idx = email_Address.indexOf('@');
String part1 = email_Address.substring(1, idx-1).replaceAll(".", "\\*");
String part2 = email_Address.substring(idx + 1, email_Address.lastIndexOf('.')).replaceAll(".", "\\*");
String masked_email_Address1=email_Address.replaceAll("^(\\S)[^@]+(\\S)@.*(\\..*)", "$1"+ part1 + "$2@" + part2 + "$3");
添加回答
举报
0/150
提交
取消