#java #regex #java-8 #functional-programming #java-stream
#java #регулярное выражение #java-8 #функциональное программирование #java-stream
Вопрос:
У меня есть следующий код:
String generalRequest = "4 6*12/3";
String[] operatorsLine = generalRequest.split("[0-9] ");
В результате у меня есть избыточное пустое значение в operatorsLine
:
«», » «, «*», «/»
Итак, я желаю результата:
» «, «*», «/»
Как пропустить добавление ""
значения в массив, используя String.split()
метод?
Комментарии:
1. Каков ваш желаемый результат?
2. @Ghanima » «, «*», «/»
Ответ №1:
Вы можете использовать что-то вроде:
String[] operatorsLine = Arrays.stream(generalRequest.split("[0-9] "))
.filter(s -> !s.isEmpty())
.toArray(String[]::new);
Комментарии:
1. Спасибо, но я получаю следующую ошибку компиляции: Ошибка: (51, 102) java: метод toArray в интерфейсе java.util.stream.Поток<T> не может быть применен к заданным типам; требуется: java.util.function. Найдена функция<A[]>: java.lang. String[] причина: не удается определить переменные типа A (несоответствие аргументов; java.lang. Строка[] не может быть преобразована в java.util.function. IntFunction<A[]>)
2. в
new String[0]
3. решено! Спасибо, друг). У меня также всегда возникают проблемы с генераторами функций)
4. Нет проблем, я рад помочь 🙂
Ответ №2:
В этом случае, когда все, что вам нужно, это односимвольные операторы,
сработало бы удаление всех цифр из строки и разделение с помощью пустой строки в качестве разделителя:
String generalRequest = "4 6*12/3";
String[] operatorsLine = generalRequest.replaceAll("\d", "").split("");
System.out.println(Arrays.toString(operatorsLine));
Это выводит:
[ , *, /]
Ответ №3:
Как насчет предоставления второго параметра split(String regex, int limit)
методу и ограничения его двумя выходными полями и повторного разделения:
String generalRequest = "4 6*12/3";
String[] operatorsLine = (generalRequest.split("\d ", 2)[1]).split("\d ");
Первое разделение выведет массив: ["", " 6*12/3"]
, затем примет первый индекс и разделит его снова с тем же регулярным выражением.
Конечное значение operatorsLine
будет [ ,*,/]