public static int getWordCount(String sentence) {
return sentence.split("(([a-zA-Z0-9]([-][_])*[a-zA-Z0-9])+)", -1).length
+ sentence.replaceAll("([[a-z][A-Z][0-9][\\W][-][_]]*)", "").length() - 1;
}
我的目的是计算句子中的单词数。该函数的输入是长句子。它可能有 255 个单词。
- 该单词之间应使用连字符或下划线
- 函数应该只计算有效单词意味着特殊字符不应该计算在内,例如。 &&&& 或 #### 不应算作一个单词。
上面的正则表达式工作正常,但是当连字符或下划线出现在单词之间时,例如:合作,返回的计数为 2,它应该是 1。有人可以帮忙吗?
而不是使用.split
and .replaceAll
这是相当昂贵的操作,请使用内存使用量恒定的方法。
根据您的规格,您似乎正在寻找以下正则表达式:
[\w-]+
接下来你可以使用这种方法 https://stackoverflow.com/a/7378472/67579计算匹配的数量:
public static int getWordCount(String sentence) {
Pattern pattern = Pattern.compile("[\\w-]+");
Matcher matcher = pattern.matcher(sentence);
int count = 0;
while (matcher.find())
count++;
return count;
}
online jDoodle demo http://jdoodle.com/a/pe.
这种方法适用于(更多)常量内存:分割时,程序构造一个数组,这基本上是无用的,因为您从不检查数组的内容。
如果您不希望单词以连字符开头或结尾,可以使用以下正则表达式:
\w+([-]\w+)*
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)