Как подсчитать количество слов в тексте с помощью регулярных выражений?
Я хочу разбить текст на слова, посчитать количество слов.
Вот как это можно представить:
int words = text.split("[\\p{Punct}*\\p{Space}*]").length;
Я пробовал несколько комбинаций, но, кажется, он разделен на слишком много частей, например
"word1 word2"
... имеет 8 слов с этим регулярным выражением, я хочу, чтобы это было только 2.
4 ответа
Попробуйте следующее регулярное выражение:
[\\p{Punct}\\p{Space}]+
Проблема с вашим текущим регулярным выражением состоит в том, что он соответствует ровно одному символу и, таким образом, отдельно соответствует каждому пробелу между word1
а также word2
, Оператор повторения, помещенный вне группы символов, исправляет это.
int countWords(String input) {
return input.trim().split("\\s+").length;
}
Слово - это просто текст, окруженный пробелами. Разбор слов из String
можно сделать, позвонив String.split()
с помощью "\\s+"
в качестве разделителя.
Обратите внимание, что "\\s+"
это регулярное выражение. Он соответствует строкам, которые состоят как минимум из одного символа пробела (например, пробел, табуляция или символ новой строки).
Используйте Guava, определите Splitter как константу:
private static final Splitter WORD_SPLITTER =
Splitter.on(CharMatcher.JAVA_LETTER_OR_DIGIT.negate())
.trimResults()
.omitEmptyStrings();
и используйте его в своем коде:
int words = Iterables.size(WORD_SPLITTER.split(yourString));