Как скрыть часть строки звёздочками
Короткий ответ
Оставьте видимыми последние символы, а остальные замените звёздочками через repeat():
void main() {
String card = "4000123456789010";
String masked = "*".repeat(card.length() - 4) + card.substring(card.length() - 4);
IO.println(masked);
}Результат:
************9010Универсальный метод
Метод с параметрами «сколько оставить в начале и в конце»:
String mask(String text, int keepStart, int keepEnd) {
if (text.length() <= keepStart + keepEnd) {
return text;
}
int hidden = text.length() - keepStart - keepEnd;
return text.substring(0, keepStart) + "*".repeat(hidden) + text.substring(text.length() - keepEnd);
}
void main() {
IO.println(mask("+49 151 2345 6789", 3, 4));
IO.println(mask("abc", 2, 2));
}Результат:
+49**********6789
abcВ адресе почты обычно скрывают середину имени до @:
void main() {
String email = "anna.smith@example.com";
int at = email.indexOf('@');
String name = email.substring(0, at);
IO.println(name.charAt(0) + "*".repeat(name.length() - 2) + name.charAt(name.length() - 1) + email.substring(at));
}Результат:
a********h@example.comЧастая ошибка
Не проверить длину. Если строка короче, чем количество видимых символов, repeat() получит отрицательное число:
void main() {
String code = "12";
IO.println("*".repeat(code.length() - 4) + code);
}Результат:
Exception in thread "main" java.lang.IllegalArgumentException: count is negative: -2Функции из этого ответа
- String.repeat() — Повторяет строку указанное число раз.
- String.substring() — Возвращает часть строки между двумя индексами.
- String.length() — Возвращает количество символов в строке.