課上的時候,根據老師的要求。完成了如下幾步java
1.統計文章中26個英文字母個數及頻率數組
2.統計文章中單詞個數,單詞出現的頻率,按降序排列,並能按照輸入的個數,進行指定數量的輸出。app
代碼沿用了以前上學期中統計單詞的代碼,map做爲一個容器 Map<String, Integer> map = new HashMap<String, Integer>();(結合百度的我的理解)ide
代碼中缺乏排序,本身的思路是建立數組,存儲頻率,可是在運行中,出現運行以後沒有結果的問題,多是複雜度過高,或者是代碼邏輯存在問題。ui
package words; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Scanner; public class Words { public static String txtString(File file){ StringBuilder result = new StringBuilder(); try{ BufferedReader br = new BufferedReader(new FileReader(file));//構造一個BufferedReader類來讀取文件 String s = null; while((s = br.readLine())!=null){//使用readLine方法,一次讀一行 result.append(s/*+System.lineSeparator()*/); } br.close(); }catch(Exception e){ e.printStackTrace(); } return result.toString(); } public static void findEnglishNum(String text){ //找出全部的單詞 String[] array = {".", " ", "?", "!","「"}; for (int i = 0; i < array.length; i++) { text = text.replace(array[i],","); } String[] textArray = text.split(","); //遍歷 記錄 Map<String, Integer> map = new HashMap<String, Integer>(); double sum=0.00; for (int i = 0; i < textArray.length; i++) { sum++; String key = textArray[i]; //轉爲小寫 String key_l = key.toLowerCase(); if(!"".equals(key_l)){ Integer num = map.get(key_l); if(num == null || num == 0){ map.put(key_l, 1); }else if(num > 0){ map.put(key_l, num+1); } } } //輸出到控制檯 System.out.println("各個單詞出現的頻率爲:"); Iterator<String> iter = map.keySet().iterator(); String [] a = new String [1000000]; int []b=new int [100000]; while(iter.hasNext()){ int i=0; String key = iter.next(); Integer num = map.get(key); a[i]=key; b[i]=num; i++; System.out.print(key + "\t" + num + "次"); double n=(num/sum); System.out.println(formatDouble5(n)+"%"); } /*for(int j=0;j<b.length;j++) for(int m=0;m<b.length;m++) { if(b[j]<b[m]) { int q=b[j]; b[j]=b[m]; b[m]=q; String p=a[j]; a[j]=a[m]; a[m]=p; } }*/ } public static String formatDouble5(double d) { return String.format("%.2f", d*100); } public static void main(String[] args){ System.out.println("請輸入路徑"); Scanner sc=new Scanner(System.in); String a=sc.next(); sc.close(); File file = new File(a); String text =txtString(file); findEnglishNum(text); } }