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

統計英文文字單詞出現頻率

題目要求:輸出單個檔案中的前 N 個最常出現的英語單詞。
作用:一個用於統計文字檔案中的英語單詞出現頻率的控制檯程式;
單詞:以英文字母開頭,由英文字母和字母數字符號組成的字串視為一個單詞。單詞以分隔符分割且不區分大小寫。在輸出時,所有單詞都用小寫字元表示。

package fanyi;
import java.io.*;
import java.util.*;
import java.util.Map.Entry;
public class piaoll
{
    public static int n=0;
    public static void main(String[] args) {
    Scanner input
=new Scanner(System.in); String s; int count=0; int num=1; //作為FileReader和FileWriter讀取的物件 String file1="D:\\piao.txt"; String file2="D:\\fenxi.txt"; try { BufferedReader a=new BufferedReader(new FileReader(file1)); BufferedWriter b=new BufferedWriter(new FileWriter(file2)); StringBuffer c
=new StringBuffer(); //將檔案內容存入StringBuffer中 while((s = a.readLine()) != null) { //用於拼接字串 c.append(s); } //將StringBuffer轉換成String,然後再將所有字元轉化成小寫字元 String m=c.toString().toLowerCase(); //匹配由數字和26個字母組成的字串 String [] d=m.split("[^a-zA-Z0-9]+");
//遍歷陣列將其存入Map<String, Integer>中 Map<String , Integer> myTreeMap=new TreeMap<String, Integer>(); for(int i = 0; i < d.length; i++) { //containsKey()方法用於檢查特定鍵是否在TreeMap中對映 if(myTreeMap.containsKey(d[i])) { count = myTreeMap.get(d[i]); myTreeMap.put(d[i], count + 1); } else { myTreeMap.put(d[i], 1); } } //通過比較器實現排序 List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(myTreeMap.entrySet()); //按降序排序 Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() { public int compare(Entry<String, Integer> k1, Entry<String, Integer> k2) { //返回兩個單詞出現次數較多的那個單詞的出現次數 return k2.getValue().compareTo(k1.getValue()); } }); System.out.println("請輸入要輸出前N名的N"); n=input.nextInt(); for(Map.Entry<String, Integer> map : list) { if(num <= n) { //按內容輸出到指定檔案中去 b.write("出現次數第" + num + "的單詞為:" + map.getKey() + ",出現頻率為" + map.getValue() + "次"); //換行 b.newLine(); //輸出到程式控制臺 System.out.println(map.getKey() + ":" + map.getValue()); num++; } //輸出完畢退出 else break; } //關閉檔案指標 a.close(); b.close(); } catch(FileNotFoundException e) { System.out.println("找不到指定檔案"); } catch(IOException e) { System.out.println("檔案讀取錯誤"); } System.out.println("輸出完成"); } }