Как подсчитать количество слов в тексте с помощью регулярных выражений?

Я хочу разбить текст на слова, посчитать количество слов.

Вот как это можно представить:

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+" это регулярное выражение. Он соответствует строкам, которые состоят как минимум из одного символа пробела (например, пробел, табуляция или символ новой строки).

int words = text.trim().split("\\s+").length;

Используйте 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));
Другие вопросы по тегам