3

単語数をカウントするために、テキストを単語に分割したい。

これは、次のように想像してください。

int words = text.split("[\\p{Punct}*\\p{Space}*]").length;

複数の組み合わせを試しましたが、あまりにも多くのパーツに分割されているようです。

"word1       word2" 

...この正規表現には 8 つの単語がありますが、2 つだけにしたいのです。

4

4 に答える 4

3
int countWords(String input) {
   return input.trim().split("\\s+").length;
}

単語は、空白で囲まれた単なるテキストです。a からの単語の解析は、区切り文字としてusingをString呼び出すことで実行できます。String.split()"\\s+"

"\\s+"は正規表現であることに注意してください。少なくとも 1 つの空白文字 (スペース、タブ、または改行など) で構成される文字列に一致します。

于 2012-05-16T16:42:50.697 に答える
3
int words = text.trim().split("\\s+").length;
于 2012-05-16T16:43:00.210 に答える
3

次の正規表現を試してください。

[\\p{Punct}\\p{Space}]+

現在の正規表現の問題は、正確に 1 文字に一致するため、 と の間の各空白に個別に一致することword1ですword2。文字グループの外に配置された繰り返し演算子はそれを修正します。

于 2012-05-16T16:35:50.477 に答える
1

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));
于 2012-05-16T16:49:45.503 に答える