单词统计续

功能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类,键存放单词,值存放出现的次数,还利用到了几个该类常用的方法,在代码中都有讲解,这里不再多说。

 

posted on 2019-05-11 18:55  宥宁  阅读(175)  评论(0编辑  收藏  举报

导航