import java.io.IOException;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Pizza {
public static String orderDescription() {
System.out.println("Input a data about new order in format: \"name, address, order, sum\". Input data should go with commas and spaces.");
Scanner scan = new Scanner(System.in);
String record = scan.next();
validateOrder(record);
return record;
}
public static String validateOrder(String record) {
Pattern patternRegexOrder = Pattern.compile("(.*), (.*), (.*), (\\d+(?:\\.\\d{0,2})?)");
Matcher matcherRegexOrder = patternRegexOrder.matcher(record);
while (matcherRegexOrder.find() == false) {
System.out.println("Check input data:\n1) All data goes throw comma and space;\n2) Name - only literals;\n3) Address - no limits;\n4) Order - no limits;\n5) Sum - total sum in format \"000.00\"");
orderDescription();
}
if (matcherRegexOrder.find()) {
System.out.println("The order has been added to queue.");
orderDescription();
}
return record;
}
public static void main(String[] args) throws IOException {
orderDescription();
}
}
matcherRegexOrder.find()
принимал значение True и тут же сбрасывался в False, поэтому тело if-a не читалось. Почему, я так и не понял.matcherRegexOrder.matches()
, и дело пошло на лад.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();
};
};