大学の後輩にブログのアドレスを教えてもらったはいいが、こっちのを教えていないままなので、トラックバックで通知。ついでにMake2Gramに手を付けておこう。クラス名のgをGに変えたのは単なるこだわり
import java.io.FileReader; import java.io.BufferedReader; import java.io.IOException; import java.util.TreeMap; public class Make2Gram{ public static void main(String[] args) throws IOException{ if(args.length == 0){ System.out.println("引数にファイル名を指定してください"); System.exit(1); } int N = 2; BufferedReader br = new BufferedReader(new FileReader(args[0])); StringBuilder sb = new StringBuilder(); String line; while((line = br.readLine()) != null) sb.append(line); br.close(); //ファイルの内容 改行抜き String text = sb.toString(); //テキストの部分文字列とその出現回数を関連付けるMap //TreeMapなのでMapのキーにした部分文字列でソートされる TreeMap<String, Integer> gramMap = new TreeMap<String, Integer>(); for(int i = 0; i < text.length() - N; i++){ //テキストからN文字取り出す String gram = text.substring(i, i + N); if(gramMap.containsKey(gram)){ //gramMapに登録されてる文字列ならカウントを増やす int count = gramMap.get(gram); count++; gramMap.put(gram, count); }else{ //gramMapに登録されていない文字列ならカウント1で登録 gramMap.put(gram, 1); } } for(String part : gramMap.keySet()){ System.out.printf("%s : %d\n", part, gramMap.get(part)); } } }