Вы используете не тот инструмент для работы. Если вы хотите разбить строку, используйте операцию split
:
List<String> tokens = Arrays.asList("This is a simple text.".split("\\b "));
. Создается список с тем же содержимым, что и текущий принятый ответ . Стоит отметить, что оба решения занимают один пробел-разделитель и сохраняют только дополнительные пробелы, тогда как вывод System.out.println(tokens);
равен [This, is, a, simple, text.]
, поскольку метод toString()
всех стандартных реализаций List
вставляет пробел после каждой запятой.
Если вы хотите сохранить все пробелы, вам придется использовать
List<String> tokens = Arrays.asList("This is a simple text.".split("\\b(?= )"));
. Фактические строки результата можно увидеть при использовании:
tokens.forEach(s -> System.out.println('"'+s+'"'));
"This"
" is"
" a"
" simple"
" text."
по сравнению с
"This"
" is"
"a"
"simple"
"text."
других решений.
Если вы хотите иметь дело с Pattern
напрямую, например, для возможности его повторного использования, он все равно не мешает вам использовать split
вместо совпадения l oop:
Pattern wordEnd = Pattern.compile("\\b(?= )");
List<String> tokens = Arrays.asList(wordEnd.split("This is a simple text."));
tokens.forEach(s -> System.out.println('"'+s+'"'));