В общем, как правильно подсказал
dodo512, метод для сканера был явно неверный.
Однако, в дебаге метод
matcherRegexOrder.find()
принимал значение True и тут же сбрасывался в False, поэтому тело if-a не читалось. Почему, я так и не понял.
Поменял на метод
matcherRegexOrder.matches()
, и дело пошло на лад.
Теперь работает так, как задумывалось. Кому интересно:
spoilerimport java.io.IOException;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.fusesource.jansi.AnsiConsole;
public class Pizza {
public static final String ANSI_RESET = "\u001B[0m";
public static final String ANSI_BLACK = "\u001B[30m";
public static final String ANSI_RED = "\u001B[31m";
public static final String ANSI_GREEN = "\u001B[32m";
public static final String ANSI_YELLOW = "\u001B[33m";
public static final String ANSI_BLUE = "\u001B[34m";
public static final String ANSI_PURPLE = "\u001B[35m";
public static final String ANSI_CYAN = "\u001B[36m";
public static final String ANSI_WHITE = "\u001B[37m";
public static String orderDescription() {
System.out.println(ANSI_GREEN + "\nВведите данные о новом заказе в формате: \"имя, адрес, заказ, сумма\". Данные нужно вводить через запятую с пробелом.\nЕсли вы хотите завершить программу - просто отправьте \"123\"" + ANSI_RESET);
Scanner scan = new Scanner(System.in);
String record = scan.nextLine();
if (record.equals("123")) {
System.out.println(ANSI_GREEN + "\nПрограмма завершена." + ANSI_RESET);
scan.close();
System.exit(0);
};
validateOrder(record);
return record;
};
public static String validateOrder(String record) {
Pattern patternRegexOrder = Pattern.compile("(\\D*), (.*), (.*), (\\d{1,}\\.\\d{2})");
Matcher matcherRegexOrder = patternRegexOrder.matcher(record);
while (matcherRegexOrder.matches() == false) {
System.out.println(ANSI_RED + "\nПроверьте правильность ввода:\n1) Все данные вводятся через запятую с пробелом;\n2) Имя - только буквы;\n3) Адрес - цифры, буквы и любые символы;\n4) Заказ - цифры, буквы и любые символы;\n5) Сумма - итоговая сумма в формате \"000.00\"" + ANSI_RESET);
orderDescription();
};
if (matcherRegexOrder.matches()) {
System.out.println(ANSI_BLUE + "\nЗаказ добавлен в очередь ожидания." + ANSI_RESET);
orderDescription();
};
return record;
};
public static void main(String[] args) throws IOException {
AnsiConsole.systemInstall();
orderDescription();
};
};