Разделить текст с помощью регулярного выражения в Java

Мне нужно получить текст, разделенный регулярным выражением в Java (каждая подстрока будет меньше или близка к 10 символам (включая пробел и специальный), и ни одно слово не будет разделено). Например, «Джеймс ушел поесть». будет «Джеймс», «вышел», «на обед», «.». Заранее спасибо.

Можете ли вы поделиться тем, что вы пробовали?

Manoj Vadehra 29.05.2019 05:51

Я пробовал Splitter в Guava, например Splitter.on(regexp).trimResults().split(text). Для регулярного выражения я использовал что-то вроде "(\W|^)[\w.]{0,10} (\W|$)". Думаю, это логически неверно.

user11372017 29.05.2019 05:59

Вы можете черпать вдохновение из: stackoverflow.com/q/4398270/9192223

hiren 29.05.2019 06:00

Вы должны определить конец для ваших частей подстрок. Если мы определим. и пробел в качестве разделителей, то вы можете использовать этот шаблон. (.{0,10})(?:\s|\.) regex101.com/r/I1nrb6/1

Hamed Ghasempour 29.05.2019 06:02

@hiren спасибо, много возможных способов решения проблемы. Но я хотел бы использовать регулярное выражение.

user11372017 29.05.2019 06:03
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
5
335
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Это выражение может быть немного сложным, возможно, мы могли бы начать с:

.{1,10}[^\s](?=\s|$)

ДЕМО

import java.util.regex.Matcher;
import java.util.regex.Pattern;

final String regex = ".{1,10}[^\\s](?=\\s|$)";
final String string = "James has gone out for a meal.";

final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);

while (matcher.find()) {
    System.out.println("Full match: " + matcher.group(0));
    for (int i = 1; i <= matcher.groupCount(); i++) {
        System.out.println("Group " + i + ": " + matcher.group(i));
    }
}

Цепь регулярных выражений

jex.im визуализирует регулярные выражения:

Во-первых, удалите все двойные пробелы, если они существуют, и примените это регулярное выражение.

.{1,11}(?:\s|$)|.{1,11}(?:[^\s]|$)

Но я бы использовал функцию разделения, а затем вычислял длину «для предложения».

Другие вопросы по теме