сейчас я делаю однострочный калькулятор, изучаю регулярные выражения и у меня есть несколько вопросов.
С 2 числами вроде: 2 + 2, результат будет 4, но если я попытаюсь ввести 3 числа: 2 + 2 + 2, на выходе будет 4, игнорируя третье число, но я собираюсь, хотя operands.length.
другое, если я попытаюсь поставить первое число как отрицательное, как : - 2 + 2, это даст мне ошибку: Исключение в потоке "main" java .lang.NumberFormatException: Для входной строки: "".
String [] operator = input.split (" \ s * - \ W + \ s * "); на самом деле не работает, но почему?
Scanner scanner = new Scanner(System.in);
while (true) {
String input = scanner.nextLine();
boolean ifExit = false;
boolean ifHelp = false;
boolean ifEmpty = false;
boolean ifOneNumber = false;
String[] operators = input.split("\\s*\\w+\\s*");
String[] operands = input.split("\\s*[+-]+\\s*");
int result = 0;
if (operands[0].matches("/exit")) {
ifExit = true;
System.out.println("Bye!");
break;
} else if (operands[0].matches("/help")) {
ifHelp = true;
System.out.println("The program calculates the sum of numbers");
} else if (operands[0].matches("")) {
ifEmpty = true;
} else if (operands[0].matches("[0-9]+") && operands.length == 1) {
ifOneNumber = true;
result += Integer.parseInt(operands[0]);
System.out.println(result);
}
for (int i = 1; i < operands.length; i++) {
result = Integer.parseInt(operands[0]);
if (operators[i].matches("[+]")) {
allBooleansAreFalse(ifHelp, ifEmpty, ifOneNumber);
result += Integer.parseInt(operands[i]);
} else if (operators[i].matches("[-]")){
allBooleansAreFalse(ifHelp, ifEmpty, ifOneNumber);
result -= Integer.parseInt(operands[i]);
} else if (operators[i].matches("[+]{2,1000}")) {
allBooleansAreFalse(ifHelp, ifEmpty, ifOneNumber);
result += Integer.parseInt(operands[i]);
} else if (operators[i].matches("[-]{2}")) {
allBooleansAreFalse(ifHelp, ifEmpty, ifOneNumber);
result += Integer.parseInt(operands[i]);
} else if (operators[i].matches("[-]{3}")) {
allBooleansAreFalse(ifHelp, ifEmpty, ifOneNumber);
result -= Integer.parseInt(operands[i]);
}
}
if (ifExit == true) {
break;
} else if (ifExit == false && ifHelp == false && ifEmpty == false && ifOneNumber == false) {
System.out.println(result);
}
}
}
public static void allBooleansAreFalse(boolean ifHelp, boolean ifEmpty, boolean ifOneNumber) {
ifHelp = false;
ifEmpty = false;
ifOneNumber = false;
}