package Exer;
import org.junit.Test;
import java.io.*;
import java.util.*;
/**
* @Author Lin
* @CreateTime 2021/4/19 22:17
*/
public class Test111 {
@Test
public void test1() throws Exception {
//开始时间
Date date1=new Date();
//创建流
InputStreamReader fis = new InputStreamReader(new FileInputStream("D:\\229827570\\FileRecv\\MobileFile\\雪中.txt"),"UTF-8");
OutputStreamWriter fos=new OutputStreamWriter(new FileOutputStream("hello1.txt"),"UTF-8");
//定义map集合
Map<Character,Integer> map = new HashMap<>();
//定义数组用来存储每次取出的个数
char[] chars = new char[1024];
//记录长度
int len;
//循环条件为每次读取的字符返回值不是-1
while ((len=fis.read(chars))!=-1){
for (int i = 0; i < len; i++) {
//判断当前的字有没有对应的次数 如果有就+1 没有就付初值1
if (map.get(chars[i])!=null){
map.put(chars[i], map.get(chars[i])+1);
}else {
map.put(chars[i],1);
}
}
}
//排序操作
List<Map.Entry<Character,Integer>> list = new ArrayList<>(map.entrySet());
//根据value的大小排序
list.sort(Comparator.comparing(Map.Entry::getValue, new Comparator< Integer >() {
@Override
public int compare(Integer o1, Integer o2) {
return -o1.compareTo(o2);
}
}));
Map<Character,Integer> map2 = new LinkedHashMap<>();
for(Map.Entry<Character,Integer> entry: list){
map2.put(entry.getKey(), entry.getValue());
}
//输出到一个新的文件中
Iterator iter=map2.entrySet().iterator();
while (iter.hasNext())
fos.write(iter.next().toString()+"\n");
//查看一共花费了多少时间
Date date2=new Date();
System.out.println("统计成功,耗时:"+(date2.getTime()-date1.getTime()));
fos.close();
}
}
JAVA 数据流练习之 统计文本中出现的字的次数
最新推荐文章于 2022-10-03 16:42:57 发布