/* * 練習問題20.10 p.480 * 入力ファイルを単語に分解して、そのファイル内で各単語の出現数を数えて表示するために * StreamTokenizerオブジェクトを使用するプログラムを作成しなさい。 * 単語とその出現数を管理するためにHashMapを使用しなさい。 */ package ch20.ex20_10; import java.io.FileReader; import java.io.IOException; import java.io.Reader; import java.io.StreamTokenizer; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; public class CheckWordFrequency { public static void checkWordFrequency(Reader source) throws IOException { HashMap<String, Integer> map = new HashMap<String, Integer>(); StreamTokenizer in = new StreamTokenizer(source); int count = 0; while(in.nextToken() != StreamTokenizer.TT_EOF) { if (map.containsKey(in.sval)) { count = map.get(in.sval); } else { count = 0; } count++; map.put(in.sval, count); } // Mapの要素をすべて表示する Set<Map.Entry<String, Integer>> entrySet = map.entrySet(); Iterator<Map.Entry<String, Integer>> it = entrySet.iterator(); while(it.hasNext()) { Map.Entry<String, Integer> entry = it.next(); String key = entry.getKey(); Integer value = entry.getValue(); System.out.println(key + ": " + value); } } public static void main(String[] args) { try { CheckWordFrequency.checkWordFrequency(new FileReader("JPL/ch20/ex20_10/test.txt")); } catch(Exception e) { System.out.println(e); } } }