在java中替换电子邮件地址的用户部分

时间:2011-01-21 18:34:21

标签: java string email replace

你有

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();
}

是否有更简单或更优雅的东西?

6 个答案:

答案 0 :(得分:5)

我会倾向于在电子邮件字符串上运行indexOf,然后再将它放入stringbuffer ...

int start = email.indexOf( '@' );

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

答案 1 :(得分:4)

"some.user@domain.com".replaceAll("^[^@]+", "******");

答案 2 :(得分:4)

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

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的一些想法(希望对此有所帮助)。我会推荐康斯坦丁的解决方案,用于这个简单的弦乐练习。简单,易读,它使您有机会处理错误情况。

答案 3 :(得分:2)

public static String removeUserFromEmail(String email) {
    String[] pieces = email.split("@");
    return (pieces.length > 1 ? "******" + pieces[1] : email);
}

答案 4 :(得分:2)

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

答案 5 :(得分:1)

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