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