2016-04-26 6 views
0

私は、ページに単語が表示される回数を記録する必要があるハッシュマップの使用を含むCSコースの課題に取り組んでいます。ハッシュマップの値に15を掛けていますか?

私はいくつかの奇妙な理由から、すべてが正常に動作し、すべてがマップに保存されているような奇妙なバグを実行しましたが、テストするためにプリントアウトするとマップのすべての値に15.

メンバーはわずか8回表示されますが、私の出力は120

レディングは32回表示されますが、私の出力は、ここ480

で関連するコードです:

Map<String, Integer> found = new HashMap<>(); 

while (match.find()) { 
    String word = match.group().toLowerCase(); 
    Integer check = found.get(word); 

    if (check == null) { 
     found.put(word, 1); 
    } else { 
     found.put(word, check+1); 
    } 
} 
... 
for (Map.Entry<String, Integer> entry : found.entrySet()) { 
    String k = entry.getKey(); 
    Integer i = entry.getValue(); 

    System.out.println("Word: " + k + " \t\t\tFrequency: " + i); 

} 

誰でもここで何が起こっているのか考えていますか?

EDIT:正規表現のためのコードと、このような:

String word_pattern = "[A-Za-z]{5,}"; 
String content = WebDoc.getBodyContent(url); 

Matcher match = Pattern.compile(word_pattern).matcher(content); 

これは私のインストラクターのサンプル・コードと一致し、彼のサンプルの実行にはないような問題は、私は理由を理解していないよりも、ここにある場合この問題があります。

+1

あなたの正規表現はあまりにも多くのものと一致しますか? –

+0

あなたが投稿したコードに関連コードはありません。上記のコメントを参照してください... –

+0

うーん、これは[ひどく馴染んだ]に見える(http://stackoverflow.com/questions/36879295/sorting-maps-without-a-comparator-an-arraylist-or-a-treeset/36879435 #comment61324680_36879295)... – shmosel

答えて

0

match.group()を使用している場合、そのマッチのインスタンスを1つだけ取得することはありません。

最初のループでcheckの値を出力して、何が起こっているのかを見てみましょう。

+0

ありがとう、それは正しい方向に私を指摘し、私はこれを修正する方法を知っていると思う。 – InstantRegret

関連する問題