1. 程式人生 > 其它 >統計英文文字字母出現頻率

統計英文文字字母出現頻率

使用者需求:

英語的26 個字母的頻率在一本小說中是如何分佈的?某型別文章中常出現的單詞是什麼?某作家最常用的詞彙是什麼?《飄》 中最常用的短語是什麼,等等。

題目要求:
(1)輸出某個英文文字檔案中 26 字母出現的頻率,由高到低排列,並顯示字母出現的百分比,精確到小數點後面兩位。
(2)字母頻率 = 這個字母出現的次數 / (所有A-Z,a-z字母出現的總數)如果兩個字母出現的頻率一樣,那麼就按照字典序排列。

package fanyi;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException; import java.io.InputStreamReader; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.StringTokenizer; public class piao { public static void main(String[] args)throws IOException { List
<Integer> list=new ArrayList<>(); DecimalFormat df=new DecimalFormat("######0.00"); //格式化 // File f = new File("D:\\飄英文版.txt"); FileInputStream fip = new FileInputStream("D:\\piao.txt"); InputStreamReader reader = new InputStreamReader(fip, "gbk"); StringBuffer sb = new StringBuffer();
while (reader.ready()) { sb.append((char) reader.read()); } // System.out.println(sb.toString()); reader.close(); fip.close(); int i; String A=sb.toString(); String M="abcdefghijklmnopqrstuvwxyz"; String temp = ""; char NUM[]=new char[A.length()]; char Z[]=new char[26]; int X[]=new int[26]; int MAX=0; Z=M.toCharArray(); for(int k=0;k<26;k++) { X[k]=0; for(i=0;i<A.length();i++) { NUM[i]=A.charAt(i); if(Z[k]==NUM[i]||Z[k]==ch(NUM[i])) { X[k]++; } } } System.out.println("這篇文章中英文字母頻率為:"); double sum=0; // System.out.println("////////////排序如下:"); for(i=0;i<25;i++) for(int k=0;k<25-i;k++) { if(X[k]<X[k+1]) { int temp2=X[k]; X[k]=X[k+1]; X[k+1]=temp2; char temp3=Z[k]; Z[k]=Z[k+1]; Z[k+1]=temp3; } } for(i=0;i<26;i++) { // System.out.println(Z[i]+"字母個數為:"+X[i]); sum=sum+X[i]; } for(i=0;i<26;i++) { double jkl=(X[i])/sum*100; System.out.println(Z[i]+"字母頻率為:"+df.format(jkl)+"%"); } } static char ch(char c) { if(!(c>=97&&c<=122)) c+=32; return c; } }