- ベストアンサー
JAVAのソートプログラムで単語の数を表示する方法
- JAVAのソートプログラムでList1.txtの内容の単語の数を数え、単語の数を隣に表示する方法を探しています。
- プログラムを修正して単語の数が多い順に表示する方法を知りたいです。
- 期待する実行結果は、ゲーム: 3, 麻雀: 2, 野球: 1です。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Lists.java import java.io.BufferedWriter; import java.nio.charset.Charset; import java.util.Map; import java.util.Map.Entry; import java.util.Scanner; import java.util.TreeMap; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.InputStreamReader; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; import java.util.List; import java.util.*; public class Lists { public static void main(String[] args) throws IOException{ File file3 = new File("C:\\List1.txt"); BufferedReader br3 = new BufferedReader(new FileReader(file3)); FileWriter filewriter3 = new FileWriter(file3,true); TreeMap<String,Integer> tm = new TreeMap<String,Integer>(); String line; while((line = br3.readLine()) != null){ String[] words = line.split("\\s"); for(String s : words){ if(!tm.containsKey(s)){ tm.put(s,1); }else{ tm.put(s,tm.get(s).intValue()+1); } } } for(String s : tm.keySet()){ System.out.println(s + " " + tm.get(s) ); } TreeMap<String,String> tm2 = new TreeMap<String,String>(new ExmComparator()); for(String s : tm.keySet()){ tm2.put(tm.get(s)+" "+s," "); } for(String s : tm2.keySet()){ System.out.println(s); } } } ExmComparator.java //降順に並べるためのコンパレータ public class ExmComparator implements java.util.Comparator{ public int compare( Object object1, Object object2 ){ return ( (Comparable)object1 ).compareTo( object2 ) * -1; } } 結果 ゲーム 3 野球 1 麻雀 2 3 ゲーム 2 麻雀 1 野球
その他の回答 (1)
- Ogre7077
- ベストアンサー率65% (170/258)
// 対象のマップ Map<String,Integer> statistic = (中略); // マップ要素で、配列を作成 List<Map.Entry<String,Integer>> data = new ArrayList<>(statistic.entrySet()); // 配列をソートして取得 Collections.sort(data, new Test()); for (Map.Entry<String,Integer> entry: data) { System.out.printf("%4d %s\n", entry.getValue(), entry.getKey()); } (中略) // マップ要素の値で降順、となる比較関数 class Test implements Comparator<Map.Entry<String,Integer>> { public int compare(Map.Entry<String,Integer> a, Map.Entry<String,Integer> b) { return -(b.getValue() - a.getValue()); } }
お礼
大変参考になりました。ありがとうございます。