用户需求:
英语的26 个字母的频率在一本小说中是如何分布的?
某类型文章中常出现的单词是什么?
某作家最常用的词汇是什么?
《哈利波特》 中最常用的短语是什么,等等。
我们就写一些程序来解决这个问题,满足一下我们的好奇心。
第0步:输出某个英文文本文件中 26 字母出现的频率,由高到低排列,并显示字母出现的百分比,精确到小数点后面两位。
字母频率 = 这个字母出现的次数 / (所有A-Z,a-z字母出现的总数)
如果两个字母出现的频率一样,那么就按照字典序排列。 如果 S 和 T 出现频率都是 10.21%, 那么, S 要排在T 的前面。
第1步:输出单个文件中的前 N 个最常出现的英语单词。
作用:一个用于统计文本文件中的英语单词出现频率。
单词:以英文字母开头,由英文字母和字母数字符号组成的字符串视为一个单词。单词以分隔符分割且不区分大小写。在输出时,所有单词都用小写字符表示。
英文字母:A-Z,a-z
字母数字符号:A-Z,a-z,0-9
第1步:输出单个文件中的前 N 个最常出现的英语单词。
分割符:空格,非字母数字符号 例:good123是一个单词,123good不是一个单词。good,Good和GOOD是同一个单词。
相关代码:
//信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; } } }
运行截图: