您的位置:首页 > 编程语言 > Java开发

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

2016-06-02 18:05 519 查看
需求分析:

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 ma
4000
p.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);
}


}

输出结果如下

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: