【问题标题】:Showing email address as hint显示电子邮件地址作为提示
【发布时间】:2014-12-10 03:43:02
【问题描述】:

我看到邮件服务将电子邮件 ID 显示为 e*****e@gmail.com ,主要是在他们的恢复页面中。

所以我试图将example@gmail.com 替换为e*****e@gmail.com

是否可以单独使用String#replace(String) 来实现它?还是我应该使用一些正则表达式来实现它。

感谢您提前提出的宝贵建议

【问题讨论】:

  • @SanKrish 你想用* 的确切数量替换字符的确切数量吗? fooooooooooooob@gnail.com 的输出是什么?
  • @AvinashRaj 会像 f****b@g***l.com 。我不需要确切的字符数

标签: java regex string replace


【解决方案1】:

搜索正则表达式:

\b(\w)\S*?(\S)(?=@)(\S+)\b

替换模式:

$1****$2$3****$4

RegEx Demo

代码:

String email = "anexample@gmail.com"; 
String repl = email.replaceFirst("\\b(\\w)\\S*?(\\S@)(\\S)\\S*(\\S\\.\\S*)\\b", 
      "$1****$2$3****$4");
//=> a****e@g****l.com

【讨论】:

  • 如果电子邮件地址的第一部分有句点,这会起作用吗?
  • 没有得到您的评论,您想转义哪些字符?你能说出输入和预期输出吗?
  • 哦,我忘记了 "$1****$2$3****$4" 周围的引号。查看更新的
  • 再更新一次,问题是 dot 没有被双重转义。立即尝试
  • 我发现这个网站:regular-expressions.info 是学习正则表达式的最佳网站之一。
【解决方案2】:

你也可以尝试不使用正则表达式

 String email = "example@gmail.com";
 int start = 1;
 int end = email.indexOf("@") - 1;
 StringBuilder sb = new StringBuilder(email);
 StringBuilder sb1=new StringBuilder();
 for(int i=start;i<end;i++){
    sb1.append("*");
 }
 sb.replace(start, end, sb1.toString());
 System.out.println(sb.toString());

输出:

 e*****e@gmail.com

【讨论】:

    【解决方案3】:

    可以通过replaceAll函数实现。

    (?<!^).(?=.*?.@)
    

    使用上面的正则表达式并将匹配的字符替换为*

    DEMO

    String s = "example@gmail.com";
    System.out.println(s.replaceAll("(?<!^).(?=.*?.@)", "*"));
    

    输出:

    e*****e@gmail.com
    

    更新:

    使用下面的正则表达式得到像e*****e@g***l.com这样的输出

    String s = "example@gmail.com";
    System.out.println(s.replaceAll("\\B.\\B(?=.*?\\.)", "*"));
    

    输出:

    e*****e@g***l.com
    

    【讨论】:

    • 感谢您的回答。但如果电子邮件 ID 包含 . (如 a.user@gmail.com),则它不起作用
    • 谢谢 :) 对初学者有好处吗,我的意思是从头开始学习?
    • 是的 :) 希望你也是 :)
    【解决方案4】:

    我建议使用indexOfsubstring。通过替换,您可以使用gmail@gmail.com 之类的电子邮件遇到 tuble

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-24
      • 2022-11-12
      • 2013-03-14
      • 2017-09-08
      • 2019-10-01
      • 1970-01-01
      • 2017-05-17
      • 1970-01-01
      相关资源
      最近更新 更多