
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;}
}
}
}
