如何使用正则表达式计算文本中的单词数?

时间:2012-05-16 16:33:44

标签: java regex string split words

我想将文字拆分为单词,以计算单词数量。

这就是想象它:

int words = text.split("[\\p{Punct}*\\p{Space}*]").length;

我尝试了多种组合,但它似乎分成了太多的部分,例如

"word1       word2" 

...这个正则表达式有8个单词,我希望它只有2个。

4 个答案:

答案 0 :(得分:3)

int countWords(String input) {
   return input.trim().split("\\s+").length;
}

单词只是由空格包围的文本。通过使用String作为分隔符调用String.split(),可以解析"\\s+"中的单词。

请注意"\\s+"是正则表达式。它匹配由至少一个空格字符组成的字符串(例如空格,制表符或换行符)。

答案 1 :(得分:3)

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

答案 2 :(得分:2)

尝试以下正则表达式:

[\\p{Punct}\\p{Space}]+

当前正则表达式的问题在于它只匹配一个字符,因此分别匹配word1word2之间的每个空格。位于字符组外部的重复运算符可以修复该问题。

答案 3 :(得分:1)

使用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));