你有
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();
}
是否有更简单或更优雅的东西?
答案 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>