Как правильно передать в split знаки "+" и "*" если они находятся в переменной

Необходимо разбить строку, представляющую собой математическое выражение (1+1, 3-2 и т. д.) по знаку операции, передавая в .split(), знак оператора (+,-,/,*) Написал такое, решение, но оно работает только с операторами - и /, на + и * выбрасывает ошибку. Понимаю, что это как-то связано со спецсимволами в регулярках, но как исправить, знаний пока не хватает. Буду признателен за помощь!

String input = "1+1"; //ошибка
String input = "1*1"; //ошибка
String input = "1-1"; //ок
String input = "1/1"; //ок

Pattern regex = Pattern.compile("(\\+|-|\\*|/)");
Matcher matcher = regex.matcher(input);

while(matcher.find()) {
    operator = matcher.group();
}

int val1 = Integer.parseInt(input.split(operator)[0]);
int val2 = Integer.parseInt(input.split(operator)[1]);

System.out.println(val1);
System.out.println(val2);

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

Автор решения: Podushkoved

Надеюсь, наведет на нужные мысли:

String[] input = new String[]{"1 + 1", "2 * 2", "3 - 3", "4 / 4"};

Arrays.stream(input)
        // Выкидываем лишние пробелы
        .map(line-> line.replaceAll("\\s", ""))
        // Добавляем запятую-разделитель
        .flatMap(line -> Stream.of(", ", line))
        // Первую запятую пропускаем
        .skip(1)
        // Каждую строку делим на массив
        // подстрок по любому из матсимволов
        .flatMap(line -> Stream.of(line.split("[+\\-*/]")))
        // Выводим результат
        .forEach(System.out::print); // 11, 22, 33, 44
→ Ссылка
Автор решения: Podushkoved

Метод split возвращает массив строк, полученный делением исходной строки на части по разделяющему регулярному выражению, например списку символов-разделителей:

String input = "1+1";
String[] arr = input.split("[+\\-*/]");
System.out.println(Arrays.toString(arr)); // [1, 1]
→ Ссылка
Автор решения: Stanislav Volodarskiy

Pattern.quote для любой строки возвращает регулярное выражение в точности отыскивающее эту строку. Все специальные символы экранируются.

Было

int val1 = Integer.parseInt(input.split(operator)[0]);

Стало

int val1 = Integer.parseInt(input.split(Pattern.quote(operator))[0]);
→ Ссылка