一、统计字符出现的次数
import java.util.*;
public class MapDemo2 {
    public static void main(String[] args) {
        String str = "joahgigaojghaougaoignahiohganignaojiai7";
        //1、 将String 转成char[]
        char[] ch = str.toCharArray();
        // 2、遍历数组,利用map统计每个字符的出现次数。
        Map<Character,Integer> map = new HashMap<>();
        // 遍历数组
        for(char c:ch){
            // 将元素作为key,出现的频次作为value存入map
            if(map.containsKey(c)){
                Integer value = map.get(c)+1;
                map.put(c,value);
            }else {
                map.put(c,1);
            }
        }
        // 3、排序
        Set<Map.Entry<Character, Integer>> entries = map.entrySet();
        // entries 是一个Set集合(无序的),每个元素是一个Entry
        // 想要排序,就要用到Collections.sort,这里需要传List集合。
        // 所以我们先把Set集合转成List集合
        // 然后自己写比较器
        List<Map.Entry<Character, Integer>> list = new ArrayList<Map.Entry<Character, Integer>>(entries);
        Collections.sort(list,new MyCompare());
        System.out.println(list);
        for(Map.Entry<Character, Integer> e:list){
            System.out.println(e.getKey()+":"+e.getValue());
        }
    }
}
class MyCompare implements Comparator<Map.Entry<Character, Integer>>{
    @Override
    public int compare(Map.Entry<Character, Integer> o1, Map.Entry<Character, Integer> o2) {
        return o2.getValue()-o1.getValue();
    }
}
二、java统计一个小说字符出现的次数
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);
        }
    }
}