输出单个文件中的前 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;}
        }
    }
}

 

posted @ 2021-11-22 23:16  zrswheart  阅读(44)  评论(0编辑  收藏  举报