Вместо Pattern.split()
вы можете переключить задачу на использование регулярного выражения, которое находит все слова в вашей строке.Поэтому вы можете использовать это регулярное выражение:
/[^/]+?/|\S+
Это соответствует либо регулярному выражению (предполагается, что оно начинается и заканчивается /
), либо слову (без пробелов).Вот полный метод:
private static final Pattern FIND_WORDS_PATTERN =
Pattern.compile("/[^/]+/|\\S+", Pattern.UNICODE_CHARACTER_CLASS);
public static List<String> getEachWord(String givenString) {
List<String> words = new ArrayList<>();
Matcher m = FIND_WORDS_PATTERN.matcher(givenString);
while (m.find()) {
words.add(m.group());
}
return words;
}
Результаты для вашего примера следующие:
Hello world /[0-9]{4}[ K][a-z]{2}/
:
["Hello", "world", "/[0-9]{4}[ K][a-z]{2}/"]
/^[a-z]{5,10}/ meetings
:
["/^[a-z]{5,10}/", "meetings"]
Start /[A-Z]) ^[0-9]{3}/ prepration
:
["Start", "/[A-Z]) ^[0-9]{3}/", "prepration"]