java代码:统计一本小说中的数字,并计算前10所占百分比

来源:互联网 发布:源码大全网页 编辑:程序博客网 时间:2024/04/30 18:12

需求分析:
1.读取小说,把小说字储存在TreeMap集合中,其中key值储存字,value储存统计字个数;
2.把取出的key,通过key得到value进行统计并排序取前10
3.定义方法,计算百分比
实现代码如下:
package com.day04;
import java.io.*

/* * 案例:读一篇小说,统计每个字符出现的次数,然后取出前十位,计算其占全文百分比 */public static void main(String[] args) throws Exception {    // TODO 自动生成的方法存根    // 1 创建文件对象    File file = new File("src//com//day04//盗墓笔记.txt");    // 2 读取文件    Reader fr = new BufferedReader(new FileReader(file));    // 3定义一个map集合存储字符和字符的数目    final Map<Character, Integer> map = new HashMap<Character, Integer>();    // 读取文件中的字符,并储存在map中    int len = 0;    while ((len = fr.read()) != -1) {        // 把读出来的每一个数赋值给char        char c = (char) len;        // 通过判断集合中是否包含该字符,如果包含就+1,不包含就取1        if (map.containsKey(c)) {            map.put(c, map.get(c) + 1);        } else {            map.put(c, 1);        }    }    // 关闭流    fr.close();    // 用set集合取出map中的key值    Set<Character> set = map.keySet();    // set是无序且不能重复的.所以需把set转换成list,进行排序    List<Character> list = new ArrayList<Character>(set);    // 自定义排序(从大到小)    Collections.sort(list, new Comparator<Character>() {        @Override        public int compare(Character o1, Character o2) {            // 比较map的value值大小,此处需将map改为final状态修饰符,这样才能供内部匿名类使用            return map.get(o2) - map.get(o1);        }    });    // 计算value值的总和,获取所有的value值存在一个集合中,然后再遍历集合    int sum = 0;    Collection<Integer> values = map.values();    for (Integer value : values) {        sum += value;    }    // for循环遍历list前10    for (int i = 0; i < 10; i++) {        char c = list.get(i);        int value = map.get(c);        System.out.println(c + "-----" + value + "----" + f(value, sum)                + "%");    }}/* * 创建方法:计算百分比 */public static String f(int value, int sum) {    // NumberFormat nf = NumberFormat.getInstance();    // nf.setMaximumFractionDigits(2);    double db = (((double) value / sum) * 100);    DecimalFormat df = new DecimalFormat("0.00");    return df.format(db);}

}
输出结果如下
这里写图片描述

0 0
原创粉丝点击