java: 集合的"妙用"--统计文件中字符的数量

需求: 有一个文件a.txt,  比如有''aa bb cc dd ef ghab"等多行字符,

 如何统计每个字符出现的次数?  并把统计结果保存到文件b.txt 中 ? 

/**
 * 统计: 文件的字符数----->按数量升序排列
 * 
 * @author wang
 * 
 * 思路:  输入流/输出流  --->读文件为char -->存入TreeMap: (char,int),统计字符数
 * 		  TreeMap 中传入比较器, 使其 (按条件) 排序
 * 		  写入排序后的结果:  到新的文件
 */

public class SortFileCount {
	public static void main(String[] args) throws Exception {
		//输入流/输出流  --->读文件为char,统计数量 -->存入TreeMap:
		FileReader r = new FileReader("a.txt");
		FileWriter w = new FileWriter("b.txt");
		
		int res=0;//准备容器: 写入统计数据
		TreeMap<Character,Integer> map = new TreeMap<>();
		while((res=r.read())!=-1) {
			if(map.containsKey((char)res)) {
				map.put((char)res, map.get((char)res) +1);
			}else {
				map.put((char)res, 1);
			}
		}
		
		// TreeMap 中传入比较器, 使其 (按条件) 排序
		TreeSet<Entry<Character,Integer>> set=new TreeSet<> (new Comparator<Entry<Character,Integer>>() {

			@Override
			public int compare(Entry<Character, Integer> o1, Entry<Character, Integer> o2) {
				//排序: key--字符,val---数量:  先比数量-->再比字符
				int x= -(o1.getValue()-o2.getValue());//数量:降序
				int y=o1.getKey()-o2.getKey();//字符: 升序
				int z=( x==0 ? y :x) ;
				return z;
			}
		});
		set.addAll(map.entrySet());//添加内容: 使其排序
		
		//将内容:写入文件保存
		for(Entry<Character,Integer> en: set) {
			if(en.getKey()=='\r' | en.getKey()=='\n') {
				w.write("换行符,"+en.getValue());
			}
			else {
				w.write(en.getKey()+","+en.getValue());
			}
			w.write("\r\n");
		}
		
		//资源关闭
		r.close();
		w.close();
	}
}

效果截图:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

根哥的博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值