源碼在Github的倉庫主頁連接地址:https://github.com/jessiyx/jessiyxhtml
需求分析.
按照《構建之法》第2章中2.3所述PSP流程,使用JAVA編程語言,獨立完成一個英文文本詞頻統計的軟件開發。
1.程序可讀入任意英文文本文件,該文件中英文詞數大於等於1個。
2.程序須要很壯健,能讀取容納英文原版《哈利波特》10萬詞以上的文章。
3.指定單詞詞頻統計功能:用戶可輸入從該文本中想要查找詞頻的一個或任意多個英文單詞,運行程序的統計功能可顯示對應單詞在文本中出現的次數和柱狀圖。
4.高頻詞統計功能:用戶從鍵盤輸入高頻詞輸出的個數k,運行程序統計功能,可按文本中詞頻數降序顯示前k個單詞的詞頻及單詞。
5.統計該文本全部單詞數量及詞頻數,並能將單詞及詞頻數按字典順序輸出到文件result.txt。
總結來講,該項目需求分析爲程序可讀入任意10萬詞之內的英文文本文件,可查找文件並可統計對應單詞在文本中出現的次數和柱狀圖,能夠根據頻率出現前K個單詞的詞頻,最後還能夠將統計結果輸出到result.txtjava
測試運行.git
程序開始運行.
github
result.txt中的輸出結果.
編程
選擇問題1.
數組
選擇問題錯誤時.
編程語言
選擇問題2.
編輯器
比較獨特的或滿意的代碼片斷.學習
// 讀取文件 String filename = "src/harrypotter.txt"; FileReader fk = new FileReader(filename); BufferedReader br = new BufferedReader(fk); // 用列表存儲過濾後單詞 List<String> ls = new ArrayList<String>(); String readLine = null; while ((readLine = br.readLine()) != null) { // 過濾出只含有字母的 String[] correctword = readLine.split("[^a-zA-Z]"); for (String word : correctword) { // 去除長度爲0的行 if (word.length() != 0) { ls.add(word); } }
// 存儲單詞計數信息,key值爲單詞,value爲單詞數並對單詞的詞頻統計 Map<String, Integer> wordsCount = new TreeMap<String, Integer>(); for (String li : ls) { if (wordsCount.get(li) != null) { wordsCount.put(li, wordsCount.get(li) + 1); } else { wordsCount.put(li, 1); } } // Map按鍵排序(sort by key) Map<String, Integer> resMap = sortMapByKey(wordsCount); for (Map.Entry<String, Integer> entry : resMap.entrySet()) { System.out.println(entry.getKey() + " " + entry.getValue()); } // 格式 // for (Map.Entry<String, String> entry : resultMap.entrySet()) { // System.out.println(entry.getKey() + " " + entry.getValue()); } // //
File file = new File("result.txt"); try { if (file.exists()) { file.createNewFile(); } // 講結果輸出到絕對路徑下 // FileWriter ff = new FileWriter(file.getAbsoluteFile()); // 講結果輸出到src下 FileWriter ff = new FileWriter(file.getCanonicalFile()); for (Entry<String, Integer> entry : resMap.entrySet()) { ff.write(entry.getKey() + "/" + entry.getValue() + " " + "\n"); } ff.close(); System.out.println("統計完成"); // System.out.println(file.getAbsoluteFile()); // System.out.println(file.getCanonicalPath()); } catch (IOException e) { e.printStackTrace(); }
總結.測試
按照字典樣式排序從a到z所用方法
Map按鍵排序(sort by key), 按值排序(sort by value)。
-- 引用自CSDN
總結:
在最後的項目結果中,我一共分紅了三個java文件,一個main文件和一個Find文件和一個Valuesort文件,在main文件中實現了讀取文件和按照字典順序排序功能,在find文件中實現了查找文件並查找改詞的詞頻和柱狀圖功能,在Valuesort文件中實現了查找前N個單詞的詞頻排序。
這個項目可能在不少人眼裏都是很基礎很簡單的,但是我從開始到結束差很少花了五天左右,參考了不少網上的資料和別人的代碼及其所用的方法。我在編程上的知識欠缺和代碼基礎薄弱成了作實驗二的一個關鍵問題。
我以爲這門課程也是真正讓我意識到本身不該該無所事事,就算是從0開始仍是從1開始,只要我有學習就能進步。之前的我對代碼並無熱愛的感受,致使我學了三年也只是門外漢,我自身的問題很是大。包括這個實驗的代碼,包括Markdown編輯器的學習,我都在努力。雖然如今不少代碼和方法我暫時只能跟着別人的思路敲一遍,再去理解,可是我相信之後我會一點點慢慢變好,從如今開始真正的打基礎。 可能不少人輕鬆就能完成的實驗,我花了不少的時間,在慢慢學習java和慢慢學習Markdown編輯器的寫做規範,這是用時間來提升本身的過程,我相信以後我會愈來愈熟練。
作這個實驗的時候,參考了不少網頁,可是中間有一次電腦自動關機致使我沒有保存到,因此只能列出我參考的兩個網頁連接。
參考:(https://blog.csdn.net/awewong/article/details/52914804)
(https://blog.csdn.net/qq_15807167/article/details/51902002)
PSP2.1 | 任務內容 | 計劃共完成須要的時間(min) | 實際完成須要的時間(min) |
---|---|---|---|
Planning | 計劃 | 10 | 9 |
Estimate | 估計這個任務須要多少時間,並規劃大體工做步驟 | 三天 | 五天 |
Development | 開發 | 120 | 130 |
Analysis | 需求分析(包括學習新技術) | 30 | 60 |
Design Spec | 生成設計文檔 | 10 | 9 |
Design Review | 設計複審(和同窗審覈設計文檔) | 5 | 6 |
Coding Standard | 代碼規範(爲目前的開發制定合適的規範) | 10 | 15 |
Design | 具體設計 | 10 | 10 |
Coding | 具體編碼 | 150 | 240 |
Test | 測試(自我修改,修改代碼,提交修改) | 30 | 50 |
Reporting | 報告 | 20 | 180 |
Rostmortem & Process Improvement Plan | 過後總結,提出過程改進計劃 | 3 | 5 |
GitHub上傳方式: (http://www.javashuo.com/article/p-rfviqlmf-ma.html)
GitHub地址點擊☞此處