2012-03-14 27 views
2

HTMLソースコード内で単語を探す必要があります。また、私は発生を数える必要があります。私は正規表現を使用しようとしています。しかし、0件の一致が見つかりました。Java文字列内の単語を検索する

正規表現を使用しています。私はその最良の方法を考えました。より良い方法があれば教えてください。

HTMLソースコードで「hsw.ads」という単語が見つかる必要があります。

以下の手順を実行しました。

int count = 0; 
{ 
    Pattern p = Pattern.compile(".*(hsw.ads).*"); 
    Matcher m = p.matcher(SourceCode); 
    while(m.find())count++; 
} 

ただし、カウントは0です。

解決策を教えてください。

ありがとうございます。あなたが任意の「表現」に一致していないので、おそらく単純な文字列検索が良いだろう ヘルプシーカー

+0

パターンの先頭と末尾にあるワイルドカードを削除し、もう一度やり直してください。 –

答えて

4

これを試してください。

private int getWordCount(String word,String source){ 
     int count = 0; 
     { 
      Pattern p = Pattern.compile(word); 
      Matcher m = p.matcher(source); 
      while(m.find()) count++; 
     } 
     return count; 
    } 

文字列で検索する単語(パターンではありません)を渡します。

+0

ありがとうございます@Mayurこれは私が探していたものです。 –

6

commons-langStringUtils.countMatches(source, "yourword")です。

commons-langを含めたくない場合は、手動で書き込むことができます。それを取得するまで-1

+0

こんにちは@ボソ。返信ありがとうございます。 StringUtilsを使用してインポートするパッケージを知っていますか? –

+0

私はcommons-langへのリンクを追加しました。クラスパスにjarファイルを追加する必要があります。その後、FQNはorg.apache.commons.lang3.StringUtils – Bozho

+0

です。ありがとう..私はすでに私のパッケージや他のパッケージにcommons-langを含めています。だからこそEclipse IDEはそのクラスのopetionを複数提案しているので、私はあなたに尋ねました。 –

1

はあなたの最初のインデックスを告げるあなたがindexOfを文字列メソッドを使用することができますJavaで文字列を検索するには、単に、source.indexOf("yourword", x)複数回、(オフセットされる)xの大きな値を供給するたびに使用しますあなたが検索した文字列の文字。それらのすべてを見つけて数えれば、これを行うことができます(より速い方法かもしれませんが、これはうまくいくはずです)。私はStringUtils CountMatchesメソッドを使用することをお勧めします。

String temp = string; //Copy to save the string 
int count = 0; 
String a = "hsw.ads"; 
int i = 0; 

while(temp.indexOf(a, i) != -1) { 
    count++; 
    i = temp.indexof(a, i) + a.length() + 1; 
} 
+0

'indexOf(a、i)'を使うと良いでしょう。毎回 'i'を増やします。 – Bozho

+0

@Bizho良い点私はそれを修正します。 – twain249

+0

'temp = string'は不要です。単に 'string'を直接参照するのはなぜですか? –

0

StringUtils.countMatches(ソースコード、「hsw.ads」)しかし、あなたは(有効である)上記持ってアプローチに固執、働くべき、私はいくつかのことをお勧めします:ジョンとして 1をあなたがその正確な部分文字列を探しているので、*助けになるでしょう。 2.あなたは '。'をエスケープしたいと思います。あなたがリテラルを探しているからです。 'ワイルドカードではありません 3.このパターンを一定にして、毎回それを再作成するのではなく、再使用します。 ;私はまだ上記のアプローチを使用してお勧めしたいが、私は、私はちょうどあなたの現在のアプローチは、概念的に欠陥ではないと指摘しようと思いました、と述べた

わずかな実装の詳細が欠落しています。

0

あなたのコードと正規表現は有効です。正規表現の先頭と末尾に。*を含める必要はありません。たとえば:あなたは本当に特別に見たい場合は、正規表現を使用するつもりならば、この場合には

String t = "hsw.ads hsw.ads hsw.ads"; 
int count = 0; 
Matcher m = Pattern.compile("hsw\\.ads").matcher(t); 
while (m.find()){ count++; } 

、カウントは、3と別のものです「」 hswと広告との間の期間、それをエスケープする必要があります。

関連する問題