WordCount擴充套件
碼雲地址:https://gitee.com/xjtsh/ExpandedWordCount
功能實現:
wc.exe -c file.c //返回檔案 file.c 的字元數
wc.exe -w file.c //返回檔案 file.c 的單詞總數
wc.exe -l file.c //返回檔案 file.c 的總行數
wc.exe -o outputFile.txt //將結果輸出到指定檔案outputFile.txt
wc.exe -s //遞迴處理目錄下符合條件的檔案
wc.exe -a file.c //返回更復雜的資料(程式碼行 / 空行 / 註釋行)
wc.exe -e stopList.txt // 停用詞表,統計檔案單詞總數時,不統計該表中的單詞
專案簡介
本專案是基礎專案的擴充套件,增加了遞迴處理目錄下符合條件的檔案、統計檔案單詞總數時,不統計停用詞表中的單詞、返回檔案的程式碼行 、 空行 、註釋行等功能。
可執行程式命名為:wc.exe,該程式處理使用者需求的模式為:
wc.exe [parameter] [input_file_name]
儲存統計結果的檔案預設為result.txt,放在與wc.exe相同的目錄下。
解題思路:
獲取鍵盤數輸入的指令,當讀取到 '-'這個命令符號字首時 ,我們能知道它將會和下一個字元一起構成一個操作指令,於是我們通過對下一個字元的讀取就能夠決定這個命令符號具體代表了什麼含義。這裡分幾種情況:若下一個字元是 'c'、 'w'、'l'之類的基本功能引數,若下一個字元是 'o'、'e'之類的拓展功能引數,那麼它會緊跟著一個txt檔案,實現的是對檔案內容停用詞檢索與執行結果輸出到檔案的操作功能;也存在下一個字元是程式未定義的引數字元如‘m’、'n'等,這時程式應當是無法識別這類命令引數的,不會執行任何操作,但一般也不會報錯。獲取待處理檔名和結果輸出檔名,通過指令中是否含有-o指令判斷是否採用預設的result.txt檔案輸出。以及獲得輸出檔名。本專案僅實現了檔案的字元數、行數、單詞數的統計。即分為一個主類和獲取字元數、行數、單詞數方、輸出方法和main方法。待處理檔案放在專案的統一資料夾內。
-e 必須與停用詞檔名同時使用,且停用詞檔案必須緊跟在-e引數後面,不允許單獨使用-e引數。
stopList.txt中停用詞可以多於1個,單詞之間以空格分割,不區分大小寫。特別的注意程式碼行後的註釋,並非另起一行的情況。
此次主要增加的則是匹配原則:
和對資料夾的遍歷:
public static List<File> getFile(File dir) { List<File> files = new ArrayList<File>(); File[] subs = dir.listFiles(); //讀取當前檔案下的所有檔案、資料夾 for (File file : subs) { if (file.isFile() && file.getName().endsWith(endString)) { files.add(file); } else if (file.isDirectory()) files.addAll(getFile(file)); //若讀取到目錄,就對當前目錄遞迴讀取 } return files; }
測試設計
對於程式測試這一塊,我一共設計了10個測試用例,其中包括8個相互獨立的常規測試用例和2種類型的錯誤測試用例。具體測試如下:
1. 基本字元測試
輸入:–c test.txt
期望輸出:字元數:148
實際輸出:字元數:148
分析:符合預期輸出
2. 行數字符測試
輸入:-l test.txt
期望輸出:,檔案總行數:7
實際輸出:檔案總行數:7
分析:符合預期輸入
3. 單詞測試
輸入:-w test.txt
期望輸出:,檔案總行數:20
實際輸出:檔案總行數:20
分析:符合預期輸入
4. 基本功能測試
輸入:-c -w -l test.txt
期望輸出:字元個數:148
單詞個數:20
檔案總行數:7
實際輸出:字元個數:148
單詞個數:20
檔案總行數:7
分析:符合預期輸出
5. 部分擴充套件功能測試
輸入:-c test.txt stoplist.txt -o output.txt
期望輸出:字元數:143
實際輸出:字元數:143
分析:符合預期輸出
6. 錯誤指令測試一(純未定義命令引數)
輸入:-m test.txt
期望輸出:無期望
實際輸出:無任何內容,但也未報錯
分析:由於並未涉及命令引數-m,故而程式無法識別對應指令無法執行。
7. 錯誤指令測試二(含未定義命令引數)
輸入:-c -m test.txt
期望輸出:無期望
實際輸出:字元個數:148
分析:由於命令語句中含有已定義的命令引數-c,故而雖然含有-m,但是程式依然識別了-c並且執行了字元統計功能。
專案總結
總的說來,這次專案確實讓我收穫了不少東西,一開始因為要求的細節過於繁瑣而且時常所以有些情緒化,在專案設計和開發的過程中沒有完全靜下心來去好好地想一下如何解決這個問題。隨著提交時間的逼近才逐漸硬著頭皮開始認真去搞這個作業,從最終的結果來看,確實學到了很多有用的東西,關於註釋行、程式碼行與空行的正則表示式匹配判定法以及如何從提高一個程式的條件覆蓋率去編寫測試用例測試程式的效能,這些都是以後走向工作崗位很寶貴、很重要的東西。特別地解決了基礎專案中-|的相關問題。作業要求中的是-l與邏輯符號或混淆而出錯。