1. 程式人生 > >WC的基本功能實現.(Java)

WC的基本功能實現.(Java)

編碼 工作 epo 輸入 stage 目前 com 審核 dev

我的GitHub地址:https://github.com/Yuetao1219/lessons

WC 項目要求

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 的行數

項目分析與實現

1.統計文本文件,首先要讀入文件,並確保文件存在並可讀。用exists()方法和canRead()方法對輸入的文件進行判斷。代碼如下:

技術分享圖片

2.對於要執行的操作,用-c統計字符,-l統計行數,-w統計單詞,-z統計字母。設計思路:以字符串的形式輸入一個或多個操作符,用空格隔開。然後用split()方法將字符串以空格分成一個或多個字符串數組,最後遍歷數組實現想執行的操作。

技術分享圖片

技術分享圖片

3.統計字符數和行數。用read()方法依次掃描文件內的每一個字符,遇到‘\n‘,則rows++,遇到!(‘ ‘&&‘\n‘),則chars++。

4.統計單詞。這個也是相對比較難的操作。因為對代碼中單詞的定義是不明確的,比如:int(算是一個單詞嗎?),char_count(算是一個單詞or兩個單詞)。既然要統計,就得找到一個明確的標準。我的標準是,對於兩個及兩個以上連續的字母則為一個單詞,除字母以外的字符作為單詞與單詞之間的分隔符。例如:對於前述的例子,int 算是一個單詞,char_count算是兩個單詞char和count。於是,既然找到了是否是單詞的定義,那麽怎樣用代碼來實現?

前面的統計字符數和行數都是直接對文本文件進行依次掃描,那麽統計單詞,就是在統計字母的基礎上,加上一個flag對字母是否連續進行判斷,以此到達統計單詞的目的。代碼如下:

技術分享圖片

首先判斷是否是字母,如果是,則flag++,不是,則flag置0。當flag>=2(滿足至少兩個字母連續),且當前字母不是字母,則words++。

遇到的困難:我最開始想到上面這個思路後,用代碼實現,我只是對flag>=2&&a不是字母進行了判斷,並words++,flag=0。沒有想到當flag=1時a不是字母的情況,此時,沒有將flag置0,盡管代碼沒有被報錯,但是,我運行程序後,多次輸入不同的測試文件,得出的輸出值都是錯誤。後來,我仔細分析了該段代碼,找到了代碼不嚴謹而導致錯誤的地方,沒有對掃描會出現的所有情況進行逐一分析,只想到了大多數情況,忽略了一些不起眼的小問題而導致這段代碼進行了錯誤的計算。經過思考和改正代碼,然後又輸入多個不同文件進行驗證,都得到了理想的輸出結果。

測試:

技術分享圖片

總結代碼量比較少,但是基本實現了對文本文件的字符數、行數、單詞和字母的統計,還沒有實現對空行數、註釋行數和代碼行數進行統計,需要改進和升級的地方還有很多。條條大路通羅馬,對於這個項目要求,一定有很多的方案和設計,以及更簡潔的代碼,所謂簡潔,不只是代碼量少,而且時間復雜度低。

PSP

PSP2.1Personal Software Process Stages預估耗時(分鐘)實際耗時(分鐘)
Planning 計劃 210
· Estimate · 估計這個任務需要多少時間 180 240
Development 開發 150 210
· Analysis · 需求分析 (包括學習新技術) 50 90
· Design Spec · 生成設計文檔 60 80
· Design Review · 設計復審 (和同事審核設計文檔) 30 40
· Coding Standard · 代碼規範 (為目前的開發制定合適的規範) 40 50
· Design · 具體設計 40 50
· Coding · 具體編碼 90 120
· Code Review · 代碼復審 20 30
· Test · 測試(自我測試,修改代碼,提交修改) 45 50
Reporting 報告 30 40
· Test Report · 測試報告 30 30
· Size Measurement · 計算工作量 30 30
· Postmortem & Process Improvement Plan · 事後總結, 並提出過程改進計劃 20 20
合計

WC的基本功能實現.(Java)