2016-04-26 9 views
0

ウェブサイト上のすべての単語をHashMapに追加して、それらに何回出現するかのキーを割り当てるJavaプログラムを作成していますページ。例えば、私は言葉だけの "Hello、ジャワ、コーヒー、ジャワ" のページでそれを実行した場合、出力はHashMapに単語が何回表示されるか

のJavaのようになります。2 コーヒー:1 こんにちは:1

また、これは無視します私が含まれたくない特定の言葉。ここに私がこれまで持っているものがあります。

Map<String, Integer> found = new HashMap<>(); // (word,frequency) 
Matcher match = Pattern.compile(word_pattern).matcher(content); 

while (match.find()) { 

    // Get the net word in lowercase 
    String word = match.group().toLowerCase(); 

    //If not the set of words to ignore, add to the found Map 
    if(!ignore.contains(word)) 
     found.put(word,  ); 
    } 

System.out.println(found); 

} 

2番目のパラメータintは、単語をHashMapに追加する前に計算する必要があります。

found.put(word, int ); 

しかし、O(nlogn)時間を保持している間に単語の出現をどのくらい正確に追加するのかは不明です。

+0

HashMapのは、O(N)償却する必要があります。私はストリームを使用しますが、あなたはJava 8を持っていますか? –

+0

なぜ、単にカウンタを作成し、 'found.put(word、counter);を実行しないでください。ループのたびにカウンタをインクリメントします。新しい単語に出会ったらリセットしてください。 – brso05

+0

@PeterLawrey私はあなたが念頭に置いている解決策が不思議です。投稿してもいいですか? – shmosel

答えて

1

私は右方向を指すのではなく、明示的なコードをあげるので、これは本当に割り当てのように見えます。

単語を処理するとき、HashMapを参照して、単語が既に存在するかどうかを確認する必要があります。そうであれば、現在のカウントに1を加えてマップを更新します。それは地図に存在しない場合は、Java 8がある場合は、1

+0

私はHashMapsのしくみと少し混乱していました。新しいキーを追加することなく既存の値を上書きすることができます。 2つの一致するキーは正しくありませんか? – Paul

+0

正しい。マップには固有のキーがあります。既存のキーを「置く」と、既に存在していたキーが置き換えられます。 – Grayman

+0

ありがとうございました!非常に助けになった。 – Paul

1

はこれを試してみてください:

if(!found.containsKey(word)){ 
    found.put(word, 1); 
}else{ 
    found.put(word, found.get(word) + 1); 
} 
2

のカウントでそれを追加し、あなたはこれを行うことができます。

found.merge(word, 1, Integer::sum); 
関連する問題