Мне нужно получить текст, разделенный регулярным выражением в Java (каждая подстрока будет меньше или близка к 10 символам (включая пробел и специальный), и ни одно слово не будет разделено). Например, «Джеймс ушел поесть». будет «Джеймс», «вышел», «на обед», «.». Заранее спасибо.
Я пробовал Splitter в Guava, например Splitter.on(regexp).trimResults().split(text). Для регулярного выражения я использовал что-то вроде "(\W|^)[\w.]{0,10} (\W|$)". Думаю, это логически неверно.
Вы можете черпать вдохновение из: stackoverflow.com/q/4398270/9192223
Вы должны определить конец для ваших частей подстрок. Если мы определим. и пробел в качестве разделителей, то вы можете использовать этот шаблон. (.{0,10})(?:\s|\.) regex101.com/r/I1nrb6/1
@hiren спасибо, много возможных способов решения проблемы. Но я хотел бы использовать регулярное выражение.
Это выражение может быть немного сложным, возможно, мы могли бы начать с:
.{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]|$)
Но я бы использовал функцию разделения, а затем вычислял длину «для предложения».
Можете ли вы поделиться тем, что вы пробовали?