10

これが尋ねられたことは知っていますが、修正できません

本文のある本オブジェクトの場合 (スペイン語): "quiero mas dinero"(実際にはかなり長くなります)

Matcherは次の場合に0を返し続けます:

    String s="mas"; // this is for testing, comes from a List<String>
    int hit=0;
    Pattern p=Pattern.compile(s,Pattern.CASE_INSENSITIVE);
    Matcher m = p.matcher(mybooks.get(i).getBody());
    m.find();
    System.out.println(s+"  "+m.groupCount()+"  " +mybooks.get(i).getBody());
    hit+=m.groupCount();

"mas 0 quiero mas dinero"はコンソールに乗り続けます。なぜああなぜ?

4

4 に答える 4

11

Matcher.groupCount()の javadoc から:

このマッチャーのパターンでキャプチャ グループの数を返します。
グループ 0 は、慣例によりパターン全体を表します。このカウントには含まれません。

return 、およびreturn からのm.find()戻り値をチェックすると、マッチャーは一致を見つけます 。truem.group()mas

sinの出現回数を数えたい場合は、次のmybooks.get(i).getBody()ように実行できます。

String s="mas"; // this is for testing, comes from a List<String>
int hit=0;
Pattern p=Pattern.compile(s,Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(mybooks.get(i).getBody());
while (m.find()) {
    hit++;
}
于 2012-09-13T20:09:50.083 に答える
2

ループせずに、文字列内の「mas」(またはその他の) 単語の数を見つけるにはどうすればよいでしょうか?

Apache Commons でStringUtilsを使用できます。

int countMatches = StringUtils.countMatches("quiero mas dinero...", "mas");
于 2012-09-13T20:19:00.533 に答える
0

regExp に括弧を追加すると、例では "(mas)" になります。

于 2014-07-17T10:28:52.257 に答える