1

ハッシュマップを使用して、テキスト ファイルから一意の単語を保存しています。ここで、ハッシュマップ内の各単語を別の大きなテキスト ファイルと比較し、テキスト ファイルに出現する各単語の頻度を追跡する必要があります。

最初にハッシュマップに追加する間、キーのみを挿入し、値を 0 に設定します。私の計画は、より大きなテキスト ファイル内の各単語の頻度として「値」を使用することです。

私の試みは次のとおりです。最初にスキャナーを使用して元のファイルを読み取り、単語をハッシュマップに保存します。次に、もう一度スキャナーを使用しますが、今回はより大きなテキスト ファイルに関連付けられています。ここから先は、ちょっと行き詰まっています。「値」を更新して「キー」にインデックスを付ける方法がわかりません。

これが私が持っているものです。

Scanner fileScanner = new Scanner (new File (fileName));
fileScanner.useDelimiter (" ");

while (fileScanner.hasNext()) {
    for (int i = 0; i < hashmap.size(); i++) {   //This I use to index the key field
        if (hashmap.get(i).equals(fileScanner.next().toString()) {
            int freq ++;
            //How do I update the value field of the corresponding value?
        }
    }
}

さて、明らかに、上記のコードでは何も機能せず、方法を見つけるのにいくつか問題があります。誰でも私を助けてもらえますか?

4

2 に答える 2

2

マップは次のようにする必要がありMap<String, Integer>ます。単語ごとに、単語の出現回数を格納する整数があります。

単語の出現回数を取得するには:Integer numberOfOccurrences = map.get(word);

単語がマップ内にあるかどうかをテストするには:if (numberOfOccurrences != null)

オカレンスの数を増やすには:numberOfOccurrences++;

この新しい値をマップに保存するには:map.put(word, numberOfOccurrences);

マップを反復処理する理由はありません。ファイルを単語ごとに読み取り、上記を使用して各単語の出現回数を増やします。

于 2012-06-03T11:13:47.527 に答える
0

単語の数をカウントしてマップとして保存しようとする場合、新しい単語が追加されたときに、0 ではなく値 1 を設定してみてください (単語は少なくとも 1 回存在します)。

更新のために、マップにキーの値が含まれているかどうかを確認し、値を増やしてもう一度入れます。古い値は置き換えられます。

これを試して

HashMap<String, Integer> hashmap = new HashMap<String, Integer>();
String key = "myWord";
hashmap.put(key, 1);
Integer tmp = null;
// lets increment value if exist in map or put new value if doesn't exits in map
if ((tmp = hashmap.get(key)) != null) {
    //if map contains word
    hashmap.put(key, tmp + 1);
} else {
    //if word is new, map does't contain it as key 
    hashmap.put(key, 1);
}
System.out.println(hashmap);
//out ->{myWord=2}
于 2012-06-03T11:25:02.323 に答える