用户需求:

英语的26 个字母的频率在一本小说中是如何分布的?

某类型文章中常出现的单词是什么?

某作家最常用的词汇是什么?

《哈利波特》 中最常用的短语是什么,等等。

我们就写一些程序来解决这个问题,满足一下我们的好奇心。

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

字母频率 = 这个字母出现的次数 / (所有A-Za-z字母出现的总数)

如果两个字母出现的频率一样,那么就按照字典序排列。  如果 S T 出现频率都是 10.21%, 那么, S 要排在T 的前面。

1步:输出单个文件中的前 N 个最常出现的英语单词。

作用:一个用于统计文本文件中的英语单词出现频率。

单词:以英文字母开头,由英文字母和字母数字符号组成的字符串视为一个单词。单词以分隔符分割且不区分大小写。在输出时,所有单词都用小写字符表示。

英文字母:A-Za-z

字母数字符号:A-Za-z0-9

1步:输出单个文件中的前 N 个最常出现的英语单词。

分割符:空格,非字母数字符号 例:good123是一个单词,123good不是一个单词。goodGoodGOOD是同一个单词。

相关代码:

 

//信1705-2 20173460 李奔                                             Ctrl+C&&Ctrl+V 
package piao;

import java.io.FileReader;
import java.util.Scanner;

public class Piao {

    @SuppressWarnings("resource")
    public static void main(String[] args) 
    {
        double []list=new double[26];
        int []c=new int[26];
        for(int k=0;k<26;k++)
        {
            list[k]=0;
        }
        for(int k=0;k<26;k++)
        {
            c[k]=k+65;
        }
        String line="";
        int a=0;
        int b=0;
        int s=0;
        try
        {
            FileReader fr=new FileReader("piao_chapter1.txt");
            Scanner in =new Scanner(fr);
            while(in.hasNext())
            {
                line=in.nextLine();
                //System.out.println(line);
                for(int i=0;i<line.length();i++)
                {
                    a=line.charAt(i);
                    if (a>=65&&a<=90)
                    {
                        b=a-65;
                    }
                    if(a>=97&&a<=122)
                    {
                        b=a-97;
                    }
                    //System.out.println(b);
                    list[b]+=1;
                    s++;
                }
            }
            for(int t=0;t<26;t++)
            {
                list[t]=list[t]/s;
                //System.out.println(list[t]);
            }
            int t,k;
            double d;
            int e;
            for(t=0;t<25;t++)
            {
                for(k=0;k<25-t;k++)
                {
                    if(list[k]<list[k+1])
                    {
                        d=list[k+1];
                        list[k+1]=list[k];
                        list[k]=d;
                        
                        e=c[k+1];
                        c[k+1]=c[k];
                        c[k]=e;
                    }
                }
            }
            for(t=0;t<26;t++)
            {
                System.out.print((char)(c[t])+"  ");
                System.out.println(String.format("%.2f", list[t]*100)+"%");
            }
        }
        catch(Exception e)
        {
            
        }
    }
     public static String returnString(String s)
        {
            if(s.equals("the"))
            {
                return "";
            }
            else
            {
                
                return s;
            }
            
        }
}

 

运行截图: