単語数をカウントするために、テキストを単語に分割したい。
これは、次のように想像してください。
int words = text.split("[\\p{Punct}*\\p{Space}*]").length;
複数の組み合わせを試しましたが、あまりにも多くのパーツに分割されているようです。
"word1 word2"
...この正規表現には 8 つの単語がありますが、2 つだけにしたいのです。
int countWords(String input) {
return input.trim().split("\\s+").length;
}
単語は、空白で囲まれた単なるテキストです。a からの単語の解析は、区切り文字としてusingをString
呼び出すことで実行できます。String.split()
"\\s+"
"\\s+"
は正規表現であることに注意してください。少なくとも 1 つの空白文字 (スペース、タブ、または改行など) で構成される文字列に一致します。
int words = text.trim().split("\\s+").length;
次の正規表現を試してください。
[\\p{Punct}\\p{Space}]+
現在の正規表現の問題は、正確に 1 文字に一致するため、 と の間の各空白に個別に一致することword1
ですword2
。文字グループの外に配置された繰り返し演算子はそれを修正します。
Guavaを使用し、スプリッターを定数として定義します。
private static final Splitter WORD_SPLITTER =
Splitter.on(CharMatcher.JAVA_LETTER_OR_DIGIT.negate())
.trimResults()
.omitEmptyStrings();
そしてあなたのコードでそれを使用してください:
int words = Iterables.size(WORD_SPLITTER.split(yourString));