Java. Как ввести несколько переменных:2 числа int и знак (+,-,*,/) в одной строке и считать их с помощью Scanner

Только начинаю покорять Java, пишу простенький калькулятор. Задание, чтобы данные для вычисления передавались в одну строку, например: 1 + 2 Пробовал следующим образом:

import java.util.Scanner;

public class Calculator {
    static Scanner scanner = new Scanner(System.in);

    public static void main(String[] args) {
        System.out.println("Введите выражение используя +, -, *, /");
        int num1 = getInt();
        char operation = getOperation();
        int num2 = getInt();

        int result = calc(num1, operation, num2);
        System.out.println("Результат операции: " + result);
    }

    public static int getInt() {
        int num;
        if (scanner.hasNextInt()) {
            num = scanner.nextInt();
        } else {
            System.out.println("Вы допустили ошибку при вводе числа. Попробуйте еще раз.");
            scanner.next();//рекурсия
            num = getInt();
        }
        return num;
    }

    public static char getOperation() {

        char operation;
        if (scanner.hasNext()) {
            operation = scanner.next().charAt(0);
        } else {
            System.out.println("Вы допустили ошибку при вводе операции. Попробуйте еще раз.");
            scanner.next();//рекурсия
            operation = getOperation();
        }
        return operation;
    }

    public static int calc(int num1, char operation, int num2) {
        int result;
        switch (operation) {
            case '+':
                result = num1 + num2;
                break;
            case '-':
                result = num1 - num2;
                break;
            case '*':
                result = num1 * num2;
                break;
            case '/':
                result = num1 / num2;
                break;
            default:
                System.out.println("Операция не распознана. Повторите ввод.");
                result = calc(num1, getOperation(), num2);//рекурсия
        }
        return result;
    }
}

Ответы (1 шт):

Автор решения: Vasily Mikhaylov

Если нужно бы было принимать строку, которая была вида, допустим 5 + 5.

Можно бы было сделать регулярные выражение с группами захвата.

Pattern p = Pattern.compile("(\\d)[\+\-\*\/]?(\\d)");
Matcher m = p.matcher(scanner.next());

m.group(0); - будет содержать первое число
m.group(1); - операнд
m.group(2); - второе число

Значение из групп захвата можно вынести в переменные и использовать в своих методах, как захочешь. С помощью Matcher можно так же проверять строку на соответствие регулярному выражению.

То есть проверить ввёл ты - "2*5" или "fgdfgf"

→ Ссылка