我想将文本拆分为单词,以计算单词的数量。
这就是想象的样子:
int words = text.split("[\\p{Punct}*\\p{Space}*]").length;
我尝试了多种组合,但它似乎分成了太多手动部分,例如
"word1 word2"
...这个正则表达式有 8 个单词,我希望它只有 2 个。
尝试以下正则表达式:
[\\p{Punct}\\p{Space}]+
当前正则表达式的问题在于它只匹配一个字符,因此分别匹配 和 之间word1
的每个空格word2
。放置在字符组之外的重复操作符解决了这个问题。
int countWords(String input) {
return input.trim().split("\\s+").length;
}
一个单词只是被空格包围的文本。String
可以通过调用String.split()
using"\\s+"
作为分隔符来解析 a 中的单词。
请注意,这"\\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));