• Java. Как "скормить" регулярку компилятору?

    @Nanahuatzin Автор вопроса
    В общем, как правильно подсказал dodo512, метод для сканера был явно неверный.
    Однако, в дебаге метод matcherRegexOrder.find() принимал значение True и тут же сбрасывался в False, поэтому тело if-a не читалось. Почему, я так и не понял.
    Поменял на метод matcherRegexOrder.matches(), и дело пошло на лад.
    Теперь работает так, как задумывалось. Кому интересно:
    spoiler
    import 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();
            };
    };
    Ответ написан
    Комментировать