zoukankan      html  css  js  c++  java
  • 【个人作业】单词统计续

    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();
            }
        }
    }
  • 相关阅读:
    SCOI2020游记
    关于我
    WC2020游记
    CSP-S 2019 游记
    回文自动机学习笔记
    全自动数字论证机(迫真)
    树状数组上二分
    《伊豆的舞女》 读书小记
    雅礼集训2019 Day5
    雅礼集训2019 Day4
  • 原文地址:https://www.cnblogs.com/gothic-death/p/11071654.html
Copyright © 2011-2022 走看看