0
点赞
收藏
分享

微信扫一扫

java统计一个小说字符出现的次数

梦幻之云 2022-01-26 阅读 107

统计一个小说字符出现的次数

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);
        }

    }
}
举报

相关推荐

0 条评论