Замена пользовательской части адреса электронной почты в Java - PullRequest
1 голос
/ 21 января 2011

У вас есть

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 ]

5 голосов
/ 21 января 2011

Я бы хотел запустить indexOf для строки электронной почты, прежде чем помещать ее в буфер строк ...

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

if( start == -1 )
{
   // handle invalid e-mail
}
else
{
   return "*****" + email.substring( start );
}
4 голосов
/ 21 января 2011

Ничего плохого в этом решении, хотя у меня есть два предложения:

1) Используйте StringBuilder вместо StringBuffer, если вам не нужно синхронизировать доступ между несколькими потоками. С StringBuffer связано снижение производительности, которое для этого приложения, скорее всего, не требуется.

2) Одним из преимуществ StringBuilder / 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 (которые, надеюсь, будут полезны) Я бы порекомендовал решение Константина для этого простого струнного упражнения. Простой, читаемый, и это дает вам возможность справиться с ошибкой.

4 голосов
/ 21 января 2011
"some.user@domain.com".replaceAll("^[^@]+", "******");
2 голосов
/ 21 января 2011

выглядит хорошо. Лучше проверить, если indexOf возвращает -1.

2 голосов
/ 21 января 2011
public static String removeUserFromEmail(String email) {
    String[] pieces = email.split("@");
    return (pieces.length > 1 ? "******" + pieces[1] : email);
}
1 голос
/ 21 января 2011

Вы можете использовать регулярное выражение, но ваше решение мне подходит.Вероятно, быстрее, чем регулярное выражение тоже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...