【发布时间】:2015-09-01 04:40:10
【问题描述】:
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。有人可以帮忙吗?
【问题讨论】:
-
哇,这是迄今为止我见过的最糟糕的串联之一。
-
元符号 \w 有什么问题?
-
你从哪里得到这个正则表达式?
-
@sharonbn
\w与 hypen 不匹配,但[-\w]当然可以。或者在上述(\w+(-?\w+)*)或类似情况下。 -
拆分是一项相当昂贵的操作。