Java實現WC.exe功能
1 WC 項目要求
項目地址:https://github.com/LIBULULU/yy
wc.exe 是一個常見的工具,它能統計文本文件的字符數、單詞數和行數。這個項目要求寫一個命令行程序,模仿已有wc.exe 的功能,並加以擴充,給出某程序設計語言源文件的字符數、單詞數和行數。
實現一個統計程序,它能正確統計程序文件中的字符數、單詞數、行數,以及還具備其他擴展功能,並能夠快速地處理多個文件。
具體功能要求:
程序處理用戶需求的模式為:
wc.exe [parameter] [file_name]
基本功能列表:
wc.exe -c file.c //返回文件 file.c 的字符數 (實現)
wc.exe -w file.c //返回文件 file.c 的詞的數目 (實現)
wc.exe -l file.c //返回文件 file.c 的行數(實現)
擴展功能:
-s 遞歸處理目錄下符合條件的文件。(未實現)
-a 返回更復雜的數據(代碼行 / 空行 / 註釋行)。
空行:本行全部是空格或格式控制字符,如果包括代碼,則只有不超過一個可顯示的字符,例如“{”。
代碼行:本行包括多於一個字符的代碼。
註釋行:本行不是代碼行,並且本行包括註釋。一個有趣的例子是有些程序員會在單字符後面加註釋:
} //註釋
在這種情況下,這一行屬於註釋行。
[file_name]: 文件或目錄名,可以處理一般通配符。
高級功能:
-x 參數。這個參數單獨使用。如果命令行有這個參數,則程序會顯示圖形界面,用戶可以通過界面選取單個文件,程序就會顯示文件的字符數、行數等全部統計信息。
需求舉例:
wc.exe -s -a *.c
返回當前目錄及子目錄中所有*.c 文件的代碼行數、空行數、註釋行數。
PSP
PSP2.1 | Personal Software Process Stages | 預估耗時(分鐘) | 實際耗時(分鐘) |
---|---|---|---|
Planning | 計劃 | 40 | 60 |
· Estimate | · 估計這個任務需要多少時間 | 30 | 45 |
Development | 開發 | 60 | 50 |
· Analysis | · 需求分析 (包括學習新技術) | 300 | 600 |
· Design Spec | · 生成設計文檔 | 30 | 50 |
· Design Review | · 設計復審 (和同事審核設計文檔) | 30 | 40 |
· Coding Standard | · 代碼規範 (為目前的開發制定合適的規範) | 10 | 15 |
· Design | · 具體設計 | 60 | 50 |
· Coding | · 具體編碼 | 220 | 360 |
· Code Review | · 代碼復審 | 30 | 40 |
· Test | · 測試(自我測試,修改代碼,提交修改) | 100 | 210 |
Reporting | 報告 | 80 | 120 |
· Test Report | · 測試報告 | 60 | 70 |
· Size Measurement | · 計算工作量 | 30 | 40 |
· Postmortem & Process Improvement Plan | · 事後總結, 並提出過程改進計劃 | 20 | 100 |
合計 | 1100 | 1850 |
遇到的困難及解決方法
1、項目開始前:本身基礎就比較差,在項目開始前花了很長一部分時間去復習java的相關基礎。
2、項目進行中:在項目設計過程中,本身這個項目對我來說比較吃力,我通過在網上查閱類似的項目類型,以及向同學請教,首先第一步搞懂了大概的項目流程,在程序進行過程中,學習了正則表達式,以及學習了I/O接口裏面的bufferreader來讀取文件,還學習了String類等。
3、項目結束後:在項目結束後將程序push到github上前,在網上對GIT進行了一個不太系統的學習,導致後面實踐,創建鑰匙的時候,出現很多問題,最後通過請假以及在網上查找學習,得以解決
設計說明
首先通過I/O流讀取文件
(1)、字符數的統計:
思路:通過BufferedReader讀入,通過String賦值,用一個readline按行讀取,最後字符串的長度就是字符的數量。
(2)、行數統計:
思路:通過BufferedReader讀入,用一個readline按行讀取。
(3)、詞數統計
思路:通過BufferedReader讀入,將按行讀入的內容通過Striing賦值給l,分割,通過正則表達式得到單詞數
(4)程序實現
思路:通過File.exists訪問文件,用switch實現幾個功能的選擇。
測試結果:
代碼覆蓋率
總結:
從一開始拿到程序,到結束程序,拓展功能和高級功能都未能實現,其中在拓展功能中的空行,代碼行,註釋行,一直在嘗試當中,最後到提交都未能實現,是有些遺憾,但通過此次程序的編寫,我對java有了更深刻的學習,相比於之前,對String,I/O接口,正則表達式等等java典型常用的知識點有了一個跟為詳細的學習。
不足:在這次實踐中,只實現了基礎功能,希望把這個程序不會的地方多請教其他同學,接著把這個程序完成。
Java實現WC.exe功能