输出单个文件中的前 N 个最常出现的英语单词
package com.company; import jdk.nashorn.internal.ir.PropertyNode; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.util.*; import java.text.NumberFormat; public class SearchWord2 { private static Object N; public static void main(String[] args) throws Exception { File f1 = new File("src/Piao.txt"); //定义一个字符缓冲输入流更快的读取数据//此处用字符输入流最适宜 BufferedReader br = new BufferedReader(new FileReader(f1)); //定义个字符串用来保存每次读取的数据 String len; long total = 0; StringBuffer sb = new StringBuffer(); while ((len = br.readLine()) != null) { sb.append(len);//将文件内容存入sb中 } //不区分大小写 String str = sb.toString().toLowerCase(); String[] elements = str.split("[^a-zA-Z\\']+"); TreeMap<String, Integer> map1 = new TreeMap<String, Integer>(); //遍历数组将其存入Map<String, Integer>中 for(int i = 0; i < elements.length; i++) { total++; if(!map1.containsKey(elements[i])) { map1.put(elements[i], 1); } else { Integer integer = map1.get(elements[i]); integer++;//本次该单词又出现了一次,将值+1, map1.put(elements[i], integer);//将得到的新的值和 键保存到集合中 } } //关闭资源 br.close(); //将map.entrySet()转换成list List<Map.Entry<String, Integer>> list = new ArrayList<>(map1.entrySet()); //通过比较器实现排序 //降序排序 Collections.sort(list, (o1, o2) -> { return o2.getValue().compareTo(o1.getValue()); // return o1.getValue().compareTo(o2.getValue()); //升序排序 }); int i=1; System.out.println("请输入频率名次:"); Scanner scan =new Scanner(System.in); int n=scan.nextInt(); System.out.println("频率为前"+n+"的单词分别为"); NumberFormat num = NumberFormat.getPercentInstance(); num.setMaximumIntegerDigits(3);// 设置整数位最大为3位数 num.setMaximumFractionDigits(2);// 设置小数位最多为两位数 for(Map.Entry<String, Integer> map : list) { if(i<=n){ System.out.println(map.getKey() + " 的出现次数为" + map.getValue()+" 占百分比为:"+num.format((float)(map.getValue()*100)/total/100)); i++;} else {break;} } } }