【问题标题】:Replacing user portion of email address in java在java中替换电子邮件地址的用户部分
【发布时间】:2011-06-13 08:15:44
【问题描述】:

你有

user.nick@domain.com

结果应该是:

******@domain.com

目前我正在这样做:

public static String removeUserFromEmail(String email) {
    StringBuffer sbEmail = new StringBuffer(email);
    int start = sbEmail.indexOf("@");
    sbEmail.delete(0, start);
    return "******" + sbEmail.toString();
}

有什么更简单或更优雅的吗?

【问题讨论】:

    标签: java string email replace


    【解决方案1】:

    您可以使用正则表达式,但您的解决方案对我来说似乎很好。可能也比正则表达式更快。

    【讨论】:

      【解决方案2】:
      "some.user@domain.com".replaceAll("^[^@]+", "******");
      

      【讨论】:

        【解决方案3】:
        public static String removeUserFromEmail(String email) {
            String[] pieces = email.split("@");
            return (pieces.length > 1 ? "******" + pieces[1] : email);
        }
        

        【讨论】:

        • 如果@不在字符串中,将会失败
        • @landon9720:很公平,认为三元运算符解决了这个问题。
        【解决方案4】:

        看起来不错。最好检查 indexOf 是否返回 -1

        【讨论】:

          【解决方案5】:

          我倾向于在将电子邮件字符串放入字符串缓冲区之前对其运行 indexOf...

          int start = email.indexOf( '@' );
          
          if( start == -1 )
          {
             // handle invalid e-mail
          }
          else
          {
             return "*****" + email.substring( start );
          }
          

          【讨论】:

            【解决方案6】:

            该解决方案没有问题,尽管我有两个建议:

            1) 除非您需要在多个线程之间同步访问,否则请使用 StringBuilder 而不是 StringBuffer。与 StringBuffer 相关的性能损失对于此应用程序来说可能是不必要的。

            2) StringBuilder/Buffer 的好处之一是避免过多的字符串连接。

            您的返回行将 Buffer 转换为字符串,然后进行连接。我可能会这样做:

            int start = email.indexOf("@");
            
            if (start < 0) {
                return "";  // pick your poison for the error condition
            }
            
            StringBuilder sbEmail = new StringBuilder(email);
            sbEmail.replace(0, start, "******");
            return sbEmail.toString();
            

            仅供参考 - 我的解决方案实际上只是对您当前使用 StringBuffer 的一些想法(希望对您有所帮助)。对于这个简单的字符串练习,我会推荐 Konstantin 的解决方案。简单、易读,它让您有机会处理错误情况。

            【讨论】:

            • +1 因为我也考虑过字符串连接惩罚。但是,这种情况下的 StringBuilder/StringBuffer 对我来说似乎是微优化。
            • @orange 我同意。虽然我倾向于不假思索地使用它。你永远不知道你的连接什么时候会潜入循环。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-09-28
            • 1970-01-01
            • 2022-07-14
            • 2023-01-28
            相关资源
            最近更新 更多