任务:
英语的26 个字母的频率在一本小说中是如何分布的?
某类型文章中常出现的单词是什么?
某作家最常用的词汇是什么?
《哈利波特》 中最常用的短语是什么,等等。
我们就写一些程序来解决这个问题,满足一下我们的好奇心。
第0步:输出某个英文文本文件中 26 字母出现的频率,由高到低排列,并显示字母出现的百分比,精确到小数点后面两位。
字母频率 = 这个字母出现的次数 / (所有A-Z,a-z字母出现的总数)
第1步:输出单个文件中的前 N 个最常出现的英语单词。
package www; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; public class WordNumTest { @SuppressWarnings("null") public static void main(String[] args) throws Exception { // TODO Auto-generated method stub int [] Num=new int [26]; for(int i=0;i<26;i++) { Num[i]=0; } //统计 try { FileReader fr = new FileReader("piao.txt"); BufferedReader bf = new BufferedReader(fr); while(bf.ready()) { int n=bf.read(); if(n=='a'||n=='A') Num[0]++; if(n=='b'||n=='B') Num[1]++; if(n=='c'||n=='D') Num[2]++; if(n=='d'||n=='D') Num[3]++; if(n=='e'||n=='E') Num[4]++; if(n=='f'||n=='F') Num[5]++; if(n=='g'||n=='G') Num[6]++; if(n=='h'||n=='H') Num[7]++; if(n=='i'||n=='I') Num[8]++; if(n=='j'||n=='J') Num[9]++; if(n=='k'||n=='K') Num[10]++; if(n=='l'||n=='L') Num[11]++; if(n=='m'||n=='M') Num[12]++; if(n=='n'||n=='N') Num[13]++; if(n=='o'||n=='O') Num[14]++; if(n=='p'||n=='P') Num[15]++; if(n=='q'||n=='Q') Num[16]++; if(n=='r'||n=='R') Num[17]++; if(n=='s'||n=='S') Num[18]++; if(n=='t'||n=='T') Num[19]++; if(n=='u'||n=='U') Num[20]++; if(n=='v'||n=='V') Num[21]++; if(n=='w'||n=='W') Num[22]++; if(n=='x'||n=='X') Num[23]++; if(n=='y'||n=='Y') Num[24]++; if(n=='z'||n=='Z') Num[25]++; } bf.close(); fr.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } //求和 int sum=0; for(int i=0;i<26;i++) { sum=sum+Num[i]; } //求百分比 double [] persent=new double [26]; for(int i=0;i<26;i++) { persent[i]=0.00; } //排序 for(int i=0;i<26;i++) { persent[i]=Num[i]*1.00/sum; //System.out.println(persent[i]); System.out.println(String.format("%.2f", persent[i])); } //输出 double []Max=new double [26]; for(int i=0;i<26;i++) { Max[i]=0; }//赋0处理 //排序 //45分钟 //2.统计单词 //3.无用词 } }