【个人作业】单词统计续

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.TreeMap;

public class Flutter {

    private static Map<String, Integer> myTreeMap = null;
    private static List<Map.Entry<String, Integer>> list = null;

    public static void main(String[] args) {
        
        int n = 0;
        Scanner in = new Scanner(System.in);
        String filename = "E:\Homework\大二下\软工\飘英文版.txt"; 
        do
        {
            System.out.println("1.显示单词并排序 2.显示字母频率 3.指定显示前n个英文单词 4.停用词 0.退出");
            n = in.nextInt();
            switch(n)
            {
            case 2:frequency();break;
            case 1:
                readAndSave(filename);
                sort();
                for(Map.Entry<String, Integer> map : list) {
                    if((!map.getKey().equals("the"))||(!map.getKey().equals("a")))
                        System.out.println(map.getKey() + " :	" + map.getValue());
                }
              //System.out.println("耗时:" + (System.currentTimeMillis() - t1) + "ms");break;
                break;
            case 3:
                {
                    System.out.println("输入数字");
                    int num = in.nextInt();
                    int c = 0;
                    readAndSave(filename);
                    sort();
                    for(Map.Entry<String, Integer> map : list) {
                        if((!map.getKey().equals("the"))||(!map.getKey().equals("a")))
                            System.out.println(map.getKey() + " :	" + map.getValue());
                        c++;
                        if(c >= num)
                            break;
                    }
                    break;
                }
            case 4:
                {
                    readAndSave(filename);
                    sort();
                    stop();
                    for(Map.Entry<String, Integer> map : list) {
                        if((!map.getKey().equals("the"))||(!map.getKey().equals("a")))
                            System.out.println(map.getKey() + " :	" + map.getValue());
                    }
                    break;
                }
            }
            
        }while(n!=0);
    }
    
    public static void readAndSave(String filename)
    {
        //long t1 = System.currentTimeMillis();
        String s;
        BufferedReader br = null;
        
        try
        {
            br = new BufferedReader(new FileReader(filename));
            
            StringBuffer sb = new StringBuffer(); 
            //将文件内容存入StringBuffer中  
            while((s = br.readLine()) != null) {  
                sb.append(s);  
            }
            //不区分大小写
            String str = sb.toString().toLowerCase();
            //分隔字符串并存入数组  (以,。空格分割)
            String[] elements = str.split("[,.“” ‘’?\s]");  
            int count = 0;  
            myTreeMap = new TreeMap<String, Integer>();  
            //遍历数组将其存入Map<String, Integer>中  
            for(int i = 0; i < elements.length; i++) {  
                if(myTreeMap.containsKey(elements[i])) {  
                    count = myTreeMap.get(elements[i]);  
                    myTreeMap.put(elements[i], count + 1);  
                 }  
                 else {  
                    myTreeMap.put(elements[i], 1);  
                 }  
            }
          //直接遍历Map输出
            /*for(Map.Entry<String, Integer> entry:myTreeMap.entrySet()){
                System.out.println(entry.getKey()+" :	"+entry.getValue());
            }*/
            //对频率从大到小排序,然后输出
            
        }catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally
        {
            try
            {
                br.close();
            }catch(Exception e)
            {
                e.printStackTrace();
            }
        }
    }
    public static void sort()
    {
        //将map.entrySet()转换成list  
        list = new ArrayList<Map.Entry<String, Integer>>(myTreeMap.entrySet());  
        //通过比较器实现排序  
        Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {  
            //降序排序  
            public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {  
                return o2.getValue().compareTo(o1.getValue());  
//                return o1.getValue().compareTo(o2.getValue()); //升序排序
            }  
        });  
    }
    
    private static String formattedDecimalToPercentage(double decimal)
    {
        //获取格式化对象
        NumberFormat nt = NumberFormat.getPercentInstance();
        //设置百分数精确度2即保留两位小数
        nt.setMinimumFractionDigits(2);
        return nt.format(decimal);
    }
    
    public static void frequency()
    {
        String a1;
        char a='A';
        int a2[]=new int[27];
        char b1[]=new char[26];
        char b2[]=new char[26];
        
        for(int i=0;i<26;i++)
        {
        b1[i]=a;
        b2[i]=(char)(a+32);
        a++;
        }
        
        /*for(int i=0;i<26;i++) {
            
            System.out.println(b1[i]);
            System.out.println(b2[i]);
        }*/
        
        try {
            BufferedReader in = new BufferedReader(new FileReader("E:\\Homework\\大二下\\软工\\飘英文版.txt"));
            String str;
            while ((str = in.readLine()) != null) {
               // System.out.println(str);
                char[] d=str.toCharArray();
                for(int i=0;i<d.length-1;i++) {
                    for(int j=0;j<26;j++) {
                        if(b1[j]==d[i]||b2[j]==d[i]) {
                            a2[j]++;
                        }
                    }
                }
            }
            
            a2[26]=0;
            for(int i=0;i<26;i++) {
                a2[26]=a2[i]+a2[26];
            }

            for(int i=0;i<26;i++) {
                System.out.print(b1[i]);
                //System.out.print("和");
                System.out.print(b2[i]);
                //System.out.print("出现的次数为:");
                //System.out.println(a2[i]);
                double d=(double)((double)a2[i]/(double)a2[26]);
                String result2=formattedDecimalToPercentage(d);
                //System.out.println("result = "+result2);
                System.out.println(" : "+result2);

            }
     
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    public static void stop()
    {
        String filename_stop = "E:\Homework\大二下\软工\停用词.txt";
        String str = null;
        try {
            BufferedReader br_stop = new BufferedReader(new FileReader(filename_stop));
             ArrayList<String> stopword = new ArrayList();
                while ((str = br_stop.readLine()) != null) {//使用readLine方法,一次读一行 读取停用词
                    stopword.add(str);
                }
                br_stop.close();
                myTreeMap.remove(stopword);
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
原文地址:https://www.cnblogs.com/gothic-death/p/11071654.html