Почему при разбивке строки на массивы подстрок, программа выдаёт неоднозначный (для меня) результат?
Дано:
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)); // [, +, =] - не верно (в моём понимании),
предполагалось: [+, =]
Вопросы:
- Почему такой вывод второго массива?
- Как правильно разбить строку в данном случае?
Спасибо.
Ответы (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]+");
