zoukankan      html  css  js  c++  java
  • 单词统计续

    功能0:输出某个英文文本文件中 26 字母出现的频率,由高到低排列,并显示字母出现的百分比,精确到小数点后面两位。

    功能1:输出文件中所有不重复的单词,按照出现次数由多到少排列,出现次数同样多的,以字典序排列。

    功能2: 指定文件目录,对目录下每一个文件执行统计的操作。 

    功能3:指定文件目录,是会递归遍历目录下的所有子目录的文件进行统计单词的功能。

    功能4:输出出现次数最多的前 n 个单词,  例如, 提示统计统计前多少名:输入10。 就是输出最常出现单词的前 10 名。 当没有指明数量的时候,我们默认列出所有单词的频率。

    功能0代码:

    package fileread;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.Reader;
    import java.math.BigDecimal;
    public class zero {
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            File f = new  File("C://《飘》第一章.txt");
            Reader reader; 
            int time [] = new int [27];//记录每个字母出现的次数 
            for(int i=1;i<27;i++)
            {
                time[i]=0;
            }
            try{
                reader = new InputStreamReader(new FileInputStream(f));   
                int tempchar;  
                while ((tempchar = reader.read()) != -1) { 
                        if(((tempchar-96)>0)&&((tempchar-96)<27))
                        {
                            time[tempchar-96]++;
                        }
                        if(((tempchar-64)>0)&&((tempchar-64)<27))
                        {
                            time[tempchar-64]++;
                        }
                }  
                reader.close();
                int sum=0;//所有字母的总数
                for(int i=1;i<27;i++)
                {
                    sum+=time[i];
                }
                double rate [] = new  double [27];//每个字母出现次数所占总次数的比率
                for(int i=1;i<27;i++)
                {
                    rate[i] = new BigDecimal((float)time[i]/sum).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
                }
                String result [] = new String [27];//用来存放结果的句子
                for(int i=1;i<27;i++)
                {
                    result[i] = "字母"+(char)(i+96)+"出现了"+time[i]+"次,"+"出现的频率为"+rate[i];
                }
                String str;
                int ti;
                for(int i=1;i<27;i++)
                {
                    for(int j=i+1;j<27;j++)
                    {
                        if(time[i]>time[j])
                        {
                            ti=time[i];
                            time[i]=time[j];
                            time[j]=ti;
                            str=result[i];
                            result[i]=result[j];
                            result[j]=str;
                        }
                    }
                }
               for(int i=1;i<27;i++)
               {
                   System.out.println(result[i]);
               }
            }
            catch (IOException e) {  
                e.printStackTrace();  
                return;  
            }  
        }
    }

    功能0思路:用简单的文件读取,读取字节在经过强制类型转换,将字节转换为字母,并通过ASCII码将读取出来的字母将大写字母与小写字母归为一类,最后再排序。

    功能1代码:

    package fileread;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Scanner;
    import java.util.Set;
    public class one {
        public static void main(String[] args) {
            File file=new File("C:\《飘》第一章.txt");
            Scanner scanner = null;
            try {
                scanner = new Scanner(file);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
            HashMap<String, Integer> hashMap=new HashMap<String,Integer>();//单词和数量映射表
            //hashmap<>中的参数,前者为键,后者为值,键一定是不重复的,值可以重复,所以只可以通过键得到值,也就是下面用到的get(String)方法
            while(scanner.hasNextLine())
            {
                String line=scanner.nextLine();
                String[] lineWords=line.split("\W+");//split用于分割句子成为数组,以参数为分割符号
                Set<String> wordSet=hashMap.keySet();//通过keyset方法得到所有的键,wordset表示表中存放单词的一列
                for(int i=0;i<lineWords.length;i++)
                {
                    if(wordSet.contains(lineWords[i]))//如果已经有这个单词了
                    {
                        Integer number=hashMap.get(lineWords[i]);
                        number++;
                        hashMap.put(lineWords[i], number);
                    }
                    else 
                    {
                        hashMap.put(lineWords[i], 1);
                    }
                }
            }
            System.out.println("统计单词:------------------------------");
            Iterator<String> iterator=hashMap.keySet().iterator();
            while(iterator.hasNext())
            {
                String word=iterator.next();
                System.out.println("单词: "+word+"出现次数:"+hashMap.get(word));
            }
        }
    }

    功能1思路:主要用了HashMap类,键存放单词,值存放出现的次数,还利用到了几个该类常用的方法,在代码中都有讲解,这里不再多说。

  • 相关阅读:
    03server
    Storm介绍(一)
    storm总结
    Spring源码分析(七)扩展接口BeanPostProcessors源码分析
    技术大牛养成指南
    02装配bean
    02Activity
    maven构建项目
    IDEA使用
    从GIt上导出Maven项目
  • 原文地址:https://www.cnblogs.com/123456www/p/10792274.html
Copyright © 2011-2022 走看看