Подскажите как можно сделать код почище

Номер должен выдаваться в формате 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
  1. Можно избежать бесконечного цикла с break, проверяя условие выхода
  2. Проверка "формата" производится после изменений во введенной строке с номером телефона -- сначала вычищаются все нецифровые символы и добавляется 7/меняется 8 -- это немного странно.
  3. Применение StringBuilder не выглядит необходимым
  4. Инициализировать неизменяемые переменные в цикле излишне.

Исходя из этих замечаний, код можно исправить следующим образом:

    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);
        }
    }
→ Ссылка