0

単語の頻度をカウントするために使用StringUtils.countMatchesしていますが、いくつかの文字で始まる単語をテキストで検索する方法はありますか?

例:

「私のアパートの芸術作品」でアートを検索すると 3 が返ってきます。artのみで始まる単語に対して 2 を返す必要があります。

私の解決策は、テキスト内の \r と \n をスペースに置き換え、コードを次のように変更することでした。

text = text.replaceAll("(\r\n|\n)"," ").toLowerCase();
searchWord = " "+searchWord.toLowerCase();
StringUtils.countMatches(text, searchWord);

次の正規表現も試しました。

patternString = "\\b(" + searchWord.toLowerCase().trim() + "([a-zA-Z]*))";
pattern = Pattern.compile(patternString);
matcher = pattern.matcher(text.toLowerCase());

質問: - 私の最初の解決策は理にかなっていますか、それとももっと良い方法がありますか?

-私の 2 番目のソリューションは高速ですか? 大きなテキスト ファイルと適切な数の検索語を扱っているためです。

ありがとう

4

2 に答える 2

2

の例をカウントするには、正規表現を使用しますart...。使用するパターンは次のとおりです。

\b<search-word>

ここでは、単語の境界\bに一致します。もちろん、パターン文字列にリストするときはエスケープする必要があります。以下に例を示します。\b

String input = "artificial art in my apartment";
Matcher matcher = Pattern.compile("\\bart").matcher(input);

int count = 0;
while (matcher.find()) {
    count++;
}

System.out.println(count);

出力:2

于 2014-06-18T15:04:27.640 に答える