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與邏輯符號或混淆而出錯。
WordCount擴展