java實現wc
GitHub地址:https://github.com/Huangxuming10/wc/tree/master/WC/src/WC
項目要求
wc.exe 是一個常見的工具,它能統計文本文件的字符數、單詞數和行數。這個項目要求寫一個命令行程序,模仿已有wc.exe 的功能,並加以擴充,給出某程序設計語言源文件的字符數、單詞數和行數。實現一個統計程序,它能正確統計程序文件中的字符數、單詞數、行數,以及還具備其他擴展功能,並能夠快速地處理多個文件。
基本要求
? -c [filename]統計文件字符數(實現)
-w [filename]統計文件詞數(實現)
-l [filename]統計文件行數(實現)
擴展功能
-s [filename]遞歸處理目錄下符合條件得文件
-a [filename]返回文件代碼行 / 空行 / 註釋行
? 支持各種文件的通配符(*,?)
高級功能
-x 圖形化界面
PSP
PSP2.1 |
Personal Software Process Stages |
預估耗時(分鐘) |
實際耗時(分鐘) |
Planning |
計劃 |
30 | 40 |
· Estimate |
· 估計這個任務需要多少時間 |
30 | 30 |
Development |
開發 |
120 | 180 |
· Analysis |
· 需求分析 (包括學習新技術) |
150 | 240 |
· Design Spec |
· 生成設計文檔 |
60 | 150 |
· Design Review |
· 設計復審 (和同事審核設計文檔) |
60 | 120 |
· Coding Standard |
· 代碼規範 (為目前的開發制定合適的規範) |
60 | 120 |
· Design |
· 具體設計 |
60 | 80 |
· Coding |
· 具體編碼 |
400 | 600 |
· Code Review |
· 代碼復審 |
60 | 90 |
· Test |
· 測試(自我測試,修改代碼,提交修改) |
60 | 60 |
Reporting |
報告 |
120 | 150 |
· Test Report |
· 測試報告 |
120 | 90 |
· Size Measurement |
· 計算工作量 |
30 | 60 |
· Postmortem & Process Improvement Plan |
· 事後總結, 並提出過程改進計劃 |
60 | 120 |
合計 |
1420 | 1930 |
解題思路
功能:-c [filename]統計文件字符數
實現:逐行讀取文件,直到文件讀取完畢,計算所有字符數目,去掉每行空字符後,統計個數,累加
功能:-w [filename]統計文件詞數
實現:逐行讀取文件,判斷是否為字符,累加字符串數組長度,直到文件讀取完畢
功能:-l [filename]統計文件行數
實現:逐行讀取文件,每讀取一行,行數加一,直到文件讀取完畢
設計實現
運行程序,main方法啟動,系統顯示使用說明,再通過用戶鍵入得到命令,讀取輸入命令內容,判斷命令和文件路徑是否正確,然後用switch語句讀取命令,判斷命令,調用各類方法實現各個功能。
代碼說明
main函數
顯示使用說明,數據的輸入輸出處理,使用nextLine實現命令的提取,使用split分割命令,調用方法實現功能
public static void main (String[] args) throws IOException {
do {
System.out.println("-c [文件路徑] 返回文件字符數");
System.out.println("-w [文件路徑] 返回文件詞數");
System.out.println("-l [文件路徑] 返回文件行數");
System.out.println("請輸入命令:");
Scanner m=new Scanner(System.in); //讀取輸入的命令
String n=m.nextLine(); //讀取輸入命令
String arr[]=n.split("\\s"); //讀取輸入命令的每一個以空格為間隔的單詞
File file=new File(arr[1]);
try {
switch (arr[0]) {
case "-c":System.out.println("字符數:"+chars);break; //返回文件字符數
case "-w":System.out.println("詞數:"+words);break; //返回文件詞數
case "-l":System.out.println("行數:"+lines);break; //返回文件行數
default:System.out.println("輸入命令錯誤!");break; //返回發生錯誤
}
} catch (Exception e) {
System.out.println("發生錯誤:文件讀入發生異常!");
}
}
實現-c\-w\-l
讀取文件,計算所有字符數目,判斷為字符,字符數chars加一,逐行讀取文件,若遇到換行符,這行數lines加一,讀取文件,以空格為條件判斷為一個詞,詞的數目words加一
int chars=0;
int words=1;
int lines=1;
FileInputStream f=new FileInputStream(file); //讀取文件
int a=0;
Boolean b=false;
String c="\t\n\r";
while ((a=f.read())!=-1) {
chars++;
if(a==‘\n‘) {
lines++;
}
if(c.indexOf(a)!=-1) {
if(b) {
words++;
}
b=false;
}
else {
b=true;
}
}
運行測試
測試一個字符的文件
測試一個詞的文件
測試一個源文件
項目小結
1.對於java語言比較陌生,很多知識點都忘了,很多時候都是靠百度來解決問題,然後不斷來理解其中代碼,明確到搜索資料的重要性
2.對於Git、GitHub有了初步的了解,對於單元測試不太懂。
3.此次項目是軟件工程的第一次項目,總的來說感覺自己做的有些倉促,許多細節的地方還有優化的空間,還有一些擴展功能可以實現,但是沒有足夠的時間。
java實現wc