统计一个小说字符出现的次数
package day04.io_class;
/*
统计一本小说,每个字符的出现次数,并排序,输出top10
小说GBK的编码
*/
import com.google.common.collect.Maps;
import java.io.*;
import java.util.*;
public class EX2 {
public static void main(String[] args){
try(
BufferedReader in = new BufferedReader(
new InputStreamReader(
new BufferedInputStream(
new FileInputStream("斗罗大陆.txt")),"GBK"));){
String str = null;
HashMap<Character, Integer> map = Maps.newHashMap();
while ((str=in.readLine())!=null){
count(str,map);
}
// 排序,要先转成list集合
List<Map.Entry<Character,Integer>> list = new ArrayList<>(map.entrySet());
Collections.sort(list, new Comparator<Map.Entry<Character, Integer>>() {
@Override
public int compare(Map.Entry<Character, Integer> o1, Map.Entry<Character, Integer> o2) {
return o2.getValue()-o1.getValue();
}
});//sort要传一个比较器,这里直接用内部类(匿名内部类)
//打印前10个
for(int i =0;i<10;i++){
Map.Entry<Character, Integer> entry = list.get(i);
System.out.println(entry.getKey()+":"+entry.getValue());
}
}catch (FileNotFoundException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void count(String str, Map<Character,Integer> map){
for(int i =0;i<str.length();i++){
char c=str.charAt(i);
Integer value=map.get(c);
value=value==null?1:value+1;
map.put(c,value);
}
}
}