Почему при разбивке строки на массивы подстрок, программа выдаёт неоднозначный (для меня) результат?

Дано:

String str = "1 + 2 = ";

Цель: разбить строку на два массива:

    • с числами;
    • с математическими операторами;

Моё решение:

String[] nums = str.split("[\\s-+/*=]+");
String[] mathSymbols = str.split("[\\s\\d]+");

Ожидаемый результат при выводе массивов:

System.out.println(Arrays.toString(nums));         // [1, 2] - всё верно
System.out.println(Arrays.toString(mathSymbols));  // [, +, =] - не верно (в моём понимании), 
                                                                 предполагалось: [+, =]

Вопросы:

  1. Почему такой вывод второго массива?
  2. Как правильно разбить строку в данном случае?

Спасибо.


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

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

Метод split() разбивает строку на массив по значение между найденными подстроками. У тебя regexp ищет группы пробелов и букв. Получается разделения происходит между "1 " и " 2 ", перед "1 " у тебя ничего нет, там происходит разделение, вот тебе и возвращается сначала пустая строка, а затем уже операторы

введите сюда описание изображения

→ Ссылка
Автор решения: Илья Николаев

Мой костыль:

String s = "1 + 2 = ";
String[] nums = outputStream.toString().split("[\\s-+*=]+");
String[] mathSymbols = s.substring(0, s.indexOf(" ")+1).matches("[\\d\\s]+") ?
            s.replace(s.substring(0, s.indexOf(" ")+1), "").split("[\\s\\d]+") :
            s.split("[\\s\\d]+");
→ Ссылка