захват границ в регулярных выражениях Java

85
23 августа 2019, 02:40

Есть задание, вырезать предложения из текста. Я использовал метод
.split() и указал символы границы разбивки "\\.|\\...|\\?|\\!", но столкнулся с тем, что символ окончания предложения не захватывается. Как указать границу, включая знак окончания предложения?
Хочу Предложение! Получаю Предложение

Answer 1

Не встречал такого метода. Немного топорно, но можно добавить какой-то спец.символ после каждого завершения предложения, а потом по этому спецсимволу разбить:

String str = new String();
List<String> regExprs = new ArrayList<>();
regExprs.add("\\.{3}");
regExprs.add("\\.{1} ");
regExprs.add("\\!");
regExprs.add("\\?");
for (String s :regExprs) {
    str = str.replaceAll(s, s + "^");
}
String[] result = str.split("\\^");
Answer 2

В классе String есть метод String[] split(String regex, int limit), второй параметр которого означает максимальное количество элементов в итоговом массиве. При отрицательном значении limit (например -1) последний разделитель также захватывается. Вообще-то этот метод и с более привычным одним параметром String[] split(String regex) все равно вызывает метод String[] split(String regex, int limit), только там limit = 0, т.е. работает без захвата последнего разделителя.

READ ALSO
Как сделать невидимый курсор на всей странице

Как сделать невидимый курсор на всей странице

Напишите пожалуйста что нужно в вставить в код что бы на всей странице курсор был невидимым

94
Lodash. Получить объект по свойству

Lodash. Получить объект по свойству

Хочу получить объект из массива объектов по указанному свойствуМассив - это route map

120
Обновить значения элемента массива

Обновить значения элемента массива

Столкнулся с ошибкой при обновлении значенияПередаю значения, но стейт не обновляется

111
Можно ли посмотреть буфер обмена на JS?

Можно ли посмотреть буфер обмена на JS?

Задача суть задачи довольно простаНа сайте есть input, посетитель ставит в него курсор и потом нажимает Ctrl+V

87