Подскажите как можно сделать код почище
Номер должен выдаваться в формате 79999999999, если длина номера 10 символов, то добавить 7 перед номером, если первая цифра 8, то менять её на 7.
public class PhoneCleanerRegex {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (true) {
String input = scanner.nextLine();
if (input.equals("0")) {
scanner.close();
break;
}
String regexOne = "[7-8]?[0-9]{10}";
String regex = "[^0-9]";
String error = "Неверный формат номера";
String numbers = input.replaceAll(regex,"");
StringBuilder stringBuilder = new StringBuilder(numbers);
if(numbers.length() == 10){
stringBuilder.replace(0, 0, "7");
}
if(numbers.charAt(0) == '8') {
stringBuilder.replace(0, 1, "7");
}
String result = stringBuilder.toString();
if(result.matches(regexOne)) {
System.out.println(result);;
} else {
System.out.println(error);
}
}
}
}
Ответы (1 шт):
Автор решения: Nowhere Man
→ Ссылка
- Можно избежать бесконечного цикла с
break, проверяя условие выхода - Проверка "формата" производится после изменений во введенной строке с номером телефона -- сначала вычищаются все нецифровые символы и добавляется 7/меняется 8 -- это немного странно.
- Применение
StringBuilderне выглядит необходимым - Инициализировать неизменяемые переменные в цикле излишне.
Исходя из этих замечаний, код можно исправить следующим образом:
public static void main(String args[]) {
Scanner scanner = new Scanner(System.in);
String regexOne = "[7-8]?[0-9]{10}";
String error = "Неверный формат номера";
String input;
while (!"0".equals(input = scanner.nextLine())) {
String result = input;
if (!input.matches(regexOne)) {
result = error;
} else if (input.length() == 10) {
result = "7" + input;
} else if (input.charAt(0) == '8') {
result = "7" + input.substring(1);
}
System.out.println(result);
}
}