zoukankan      html  css  js  c++  java
  • 单词统计1——字母频率、单词频率

    课上的时候,根据老师的要求。完成了以下几步

    1.统计文章中26个英文字母个数及频率

    2.统计文章中单词个数,单词出现的频率,按降序排列,并能按照输入的个数,进行指定数量的输出。

    代码沿用了之前上学期中统计单词的代码,map作为一个容器 Map<String, Integer> map = new HashMap<String, Integer>();(结合百度的个人理解)

    代码中缺少排序,自己的思路是创建数组,存储频率,但是在运行中,出现运行之后没有结果的问题,可能是复杂度太高,或者是代码逻辑存在问题。

    package words;
    
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileReader;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.Scanner;
    
    public class Words {
        public static String txtString(File file){
            StringBuilder result = new StringBuilder();
       try{
           BufferedReader br = new BufferedReader(new FileReader(file));//构造一个BufferedReader类来读取文件
           String s = null;
           while((s = br.readLine())!=null){//使用readLine方法,一次读一行
               result.append(s/*+System.lineSeparator()*/);
           }
           br.close();    
       }catch(Exception e){
           e.printStackTrace();
       }
       return result.toString();
    }
        public static void findEnglishNum(String text){
            //找出所有的单词
            String[] array = {".", " ", "?", "!","“"};
                for (int i = 0; i < array.length; i++) {
                    text = text.replace(array[i],",");
                }
                String[] textArray = text.split(",");
                //遍历 记录
                Map<String, Integer> map = new HashMap<String, Integer>();
                double sum=0.00;
                for (int i = 0; i < textArray.length; i++) {
                    sum++;
                    String key = textArray[i];
                    //转为小写
                    String key_l = key.toLowerCase();
                    if(!"".equals(key_l)){
                        Integer num = map.get(key_l);
                        if(num == null || num == 0){
                            map.put(key_l, 1);
                        }else if(num > 0){
                            map.put(key_l, num+1);
                        }
                    }
                }
                //输出到控制台
                System.out.println("各个单词出现的频率为:");
                Iterator<String> iter = map.keySet().iterator();
                String [] a = new String [1000000];
                int []b=new int [100000];
                while(iter.hasNext()){
                    int i=0;
                    String key = iter.next();
                    Integer num = map.get(key);
                    a[i]=key;
                    b[i]=num;
                    i++;
                    System.out.print(key + "	" + num + "次");
                    double n=(num/sum);
                    System.out.println(formatDouble5(n)+"%");
                }
                /*for(int j=0;j<b.length;j++)
                    for(int m=0;m<b.length;m++) {
                        if(b[j]<b[m]) {
                            int q=b[j];
                            b[j]=b[m];
                            b[m]=q;
                            String p=a[j];
                            a[j]=a[m];
                            a[m]=p;                       
                        }
                    }*/
            }
        public static String formatDouble5(double d) {
            return String.format("%.2f", d*100);
        }
        
        public static void main(String[] args){
            System.out.println("请输入路径");
            Scanner sc=new Scanner(System.in);
            String a=sc.next();
            sc.close();
            File file = new File(a);
            String text =txtString(file);
            findEnglishNum(text);
            }
    
    }
    View Code
  • 相关阅读:
    085 Maximal Rectangle 最大矩形
    084 Largest Rectangle in Histogram 柱状图中最大的矩形
    083 Remove Duplicates from Sorted List 有序链表中删除重复的结点
    082 Remove Duplicates from Sorted List II 有序的链表删除重复的结点 II
    081 Search in Rotated Sorted Array II 搜索旋转排序数组 ||
    080 Remove Duplicates from Sorted Array II 从排序阵列中删除重复 II
    079 Word Search 单词搜索
    078 Subsets 子集
    bzoj2326: [HNOI2011]数学作业
    bzoj2152: 聪聪可可
  • 原文地址:https://www.cnblogs.com/lixv2018/p/11057352.html
Copyright © 2011-2022 走看看