我想将文字拆分为单词,以计算单词数量。
这就是想象它:
int words = text.split("[\\p{Punct}*\\p{Space}*]").length;
我尝试了多种组合,但它似乎分成了太多的部分,例如
"word1 word2"
...这个正则表达式有8个单词,我希望它只有2个。
答案 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}]+
当前正则表达式的问题在于它只匹配一个字符,因此分别匹配word1
和word2
之间的每个空格。位于字符组外部的重复运算符可以修复该问题。
答案 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));