Проблема с тестом в регулярных выражениях
Задача: Реализовать удаление избыточных значений при вводе номера телефона в консоли и проверить соответствие номера формату мобильных номеров в России. Если введенную строку нельзя преобразовать в формат мобильного номера, отобразить сообщение о недопустимом вводе. Телефон можно вводить не только в формате 79091234567, но и с дополнительными символами. Примеры вводимых значений и результаты вывода программы
В результате, при вводе номера телефона в консоль, в предоставленном коде удалось реализовать условия удаления избыточных значений по всем предложенным вариантам, за исключением: 9-453-1234567.
*Не могу понять в каком месте и каким образом прописать условие для корректной отработки теста. Ошибка, из-за которой тест не проходит, это номер начинающийся с 9 и имеющий 11 цифр. Согласно условию задания, при подобном вводе должно выводиться "Неверный формат номера". В моем случае происходит преобразование номера.
Пример 9-453-1234567 (Должно выводится "Неверный формат номера"), а выводится "74531234567"
Код:
package practice.regex;
import java.util.Scanner;
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;
}
// TODO:напишите ваш код тут, результат вывести в консоль.
String regex = "[^0-9]";
String phoneNumber = input.replaceAll(regex, "");
if (phoneNumber.length() > 11 || phoneNumber.length() < 10) {
System.out.println("Неверный формат номера");
break;
} else {
if ((phoneNumber.charAt(0) == '8') || (phoneNumber.length() != 10)) {
phoneNumber = phoneNumber.replaceFirst("[0-9]{1}", "7");
System.out.println(phoneNumber);
break;
}
if (phoneNumber.length() == 10) {
System.out.println("7" + phoneNumber);
} else {
System.out.println(phoneNumber);
}
break;
}
}
}
}
Ответы (1 шт):
Всё решила. Использовала метод charAt(0) == '9', переставила все if с номером 10 на начало и добавила необходимый if в конец программы.
package practice.regex;
import java.util.Scanner;
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;
}
// TODO:напишите ваш код тут, результат вывести в консоль.
String regex = "[^0-9]";
String phoneNumber = input.replaceAll(regex, "");
if (phoneNumber.length() > 11 || phoneNumber.length() < 10) {
System.out.println("Неверный формат номера");
break;
}
if (phoneNumber.length() == 10) {
System.out.println("7" + phoneNumber);
}
else {
if (phoneNumber.charAt(0) == '8') {
phoneNumber = phoneNumber.replaceFirst("[0-9]", "7");
System.out.println(phoneNumber);
break;
}
if (phoneNumber.charAt(0) == '9') {
System.out.println("Неверный формат номера");
break;
}
else {
System.out.println(phoneNumber);
}
}
}
}
}