Как правильно передать в 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 шт):
Надеюсь, наведет на нужные мысли:
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
Метод split возвращает массив строк, полученный делением исходной строки на части по разделяющему регулярному выражению, например списку символов-разделителей:
String input = "1+1";
String[] arr = input.split("[+\\-*/]");
System.out.println(Arrays.toString(arr)); // [1, 1]
Pattern.quote для любой строки возвращает регулярное выражение в точности отыскивающее эту строку. Все специальные символы экранируются.
Было
int val1 = Integer.parseInt(input.split(operator)[0]);
Стало
int val1 = Integer.parseInt(input.split(Pattern.quote(operator))[0]);