3

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

这就是想象的样子:

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

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

"word1       word2" 

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

4

4 回答 4

3

尝试以下正则表达式:

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

当前正则表达式的问题在于它只匹配一个字符,因此分别匹配 和 之间word1的每个空格word2。放置在字符组之外的重复操作符解决了这个问题。

于 2012-05-16T16:35:50.477 回答
3
int countWords(String input) {
   return input.trim().split("\\s+").length;
}

一个单词只是被空格包围的文本。String可以通过调用String.split()using"\\s+"作为分隔符来解析 a 中的单词。

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

于 2012-05-16T16:42:50.697 回答
3
int words = text.trim().split("\\s+").length;
于 2012-05-16T16:43:00.210 回答
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));
于 2012-05-16T16:49:45.503 回答