題目:用戶需求:英語的26 個字母的頻率在一本小說中是如何分佈的?某類型文章中常出現的單詞是什麼?某做家最經常使用的詞彙是什麼?《哈利波特》 中最經常使用的短語是什麼,等等。咱們就寫一些程序來解決這個問題,知足一下咱們的好奇心。java
第0步:輸出某個英文文本文件中 26 字母出現的頻率,由高到低排列,並顯示字母出現的百分比,精確到小數點後面兩位。字母頻率 = 這個字母出現的次數 / (全部A-Z,a-z字母出現的總數)若是兩個字母出現的頻率同樣,那麼就按照字典序排列。 若是 S 和 T 出現頻率都是 10.21%, 那麼, S 要排在T 的前面。app
第1步:輸出單個文件中的前 N 個最常出現的英語單詞。做用:一個用於統計文本文件中的英語單詞出現頻率。單詞:以英文字母開頭,由英文字母和字母數字符號組成的字符串視爲一個單詞。單詞以分隔符分割且不區分大小寫。在輸出時,全部單詞都用小寫字符表示。英文字母:A-Z,a-z字母數字符號:A-Z,a-z,0-9spa
第2步:輸出單個文件中的前 N 個最常出現的英語單詞。分割符:空格,非字母數字符號 例:good123是一個單詞,123good不是一個單詞。good,Good和GOOD是同一個單詞。code
1 import java.io.BufferedReader; 2 import java.io.File; 3 import java.io.FileInputStream; 4 import java.io.IOException; 5 import java.io.InputStreamReader; 6 import java.text.DecimalFormat; 7 import java.util.ArrayList; 8 import java.util.HashMap; 9 import java.util.Iterator; 10 import java.util.List; 11 import java.util.StringTokenizer; 12 public class test2 { 13 public static void main(String[] args)throws IOException 14 { 15 List<Integer> list=new ArrayList<>(); 16 DecimalFormat df=new DecimalFormat("######0.00"); 17 File f = new File("piao1.txt"); 18 FileInputStream fip = new FileInputStream(f); 19 InputStreamReader reader = new InputStreamReader(fip, "gbk"); 20 StringBuffer sb = new StringBuffer(); 21 while (reader.ready()) { 22 sb.append((char) reader.read()); 23 } 24 System.out.println(sb.toString()); 25 reader.close(); 26 fip.close(); 27 int i; 28 String A=sb.toString(); 29 String M="abcdefghijklmnopqrstuvwxyz"; 30 String temp = ""; 31 char NUM[]=new char[A.length()]; 32 char Z[]=new char[26]; 33 int X[]=new int[26]; 34 int MAX=0; 35 Z=M.toCharArray(); 36 for(int k=0;k<26;k++) 37 { 38 X[k]=0; 39 for(i=0;i<A.length();i++) 40 { 41 NUM[i]=A.charAt(i); 42 if(Z[k]==NUM[i]||Z[k]==ch(NUM[i])) 43 { 44 X[k]++; 45 } 46 } 47 } 48 System.out.println("這篇文章中英文字母個數分別爲:"); 49 double sum=0; 50 System.out.println("////////////排序以下:"); 51 for(i=0;i<25;i++) 52 for(int k=0;k<25-i;k++) 53 { 54 if(X[k]<X[k+1]) 55 { 56 int temp2=X[k]; 57 X[k]=X[k+1]; 58 X[k+1]=temp2; 59 char temp3=Z[k]; 60 Z[k]=Z[k+1]; 61 Z[k+1]=temp3; 62 } 63 } 64 for(i=0;i<26;i++) 65 { 66 System.out.println(Z[i]+"字母個數爲:"+X[i]); 67 sum=sum+X[i]; 68 } 69 for(i=0;i<26;i++) 70 { 71 double jkl=(X[i])/sum*100; 72 System.out.println(Z[i]+"字母頻率爲:"+df.format(jkl)+"%"); 73 } 74 StringTokenizer st = new StringTokenizer(sb.toString(),",.! \n"); 75 String []a1=StatList(sb.toString()); 76 int[]b1=StatList1(sb.toString()); 77 System.out.println("//////////////////////////////"); 78 for(i=0;i<a1.length-1;i++) 79 for(int j=0;j<a1.length-1-i;j++) 80 { 81 if(b1[j]<b1[j+1]) 82 { 83 int temp6=b1[j]; 84 b1[j]=b1[j+1]; 85 b1[j+1]=temp6; 86 String temp7=a1[j]; 87 a1[j]=a1[j+1]; 88 a1[j+1]=temp7; 89 } 90 } 91 for(i=0;i<a1.length-1;i++) 92 { 93 System.out.println("單詞:"+a1[i]+" 且出現的次數:"+b1[i]); 94 } 95 } 96 static char ch(char c) 97 { 98 if(!(c>=97&&c<=122)) 99 c+=32; 100 return c; 101 } 102 static String[] StatList(String str) { 103 StringBuffer sb = new StringBuffer(); 104 HashMap<String ,Integer> has = new HashMap<String ,Integer> (); // 打開一個哈希表 105 String[] slist = str.split("\\W+"); 106 int sum=0; 107 int sum1=0; 108 for (int i = 0; i < slist.length; i++) { 109 if (!has.containsKey(slist[i])) { // 若尚無此單詞 110 has.put(slist[i], 1); 111 sum++; 112 sum1++; 113 } else {//若是有,就在將次數加1 114 Integer nCounts = has.get(slist[i]); 115 116 has.put(slist[i],nCounts+1 ); 117 } 118 } 119 int temp=0; 120 int temp1=0; 121 String []a=new String[sum]; 122 int []b=new int[sum1]; 123 Iterator iterator = has.keySet().iterator(); 124 while(iterator.hasNext()){ 125 String word = (String) iterator.next(); 126 a[temp]=word; 127 temp++; 128 } 129 return a; 130 } 131 static int[] StatList1(String str) { 132 StringBuffer sb = new StringBuffer(); 133 HashMap<String ,Integer> has = new HashMap<String ,Integer> (); // 打開一個哈希表 134 String[] slist = str.split("\\W+"); 135 int sum=0; 136 int sum1=0; 137 for (int i = 0; i < slist.length; i++) { 138 if (!has.containsKey(slist[i])) { // 若尚無此單詞 139 has.put(slist[i], 1); 140 sum++; 141 sum1++; 142 } else {//若是有,就在將次數加1 143 Integer nCounts = has.get(slist[i]); 144 145 has.put(slist[i],nCounts+1 ); 146 147 } 148 } 149 int temp=0; 150 int temp1=0; 151 String []a=new String[sum]; 152 int []b=new int[sum1]; 153 Iterator iterator = has.keySet().iterator(); 154 while(iterator.hasNext()){ 155 String word = (String) iterator.next(); 156 b[temp1]=has.get(word); 157 temp1++; 158 } 159 return b; 160 } 161 }
功能能夠完成,可是沒有辦法檢驗準確性。orm