WordCount
李成洪的github
一..需求說明
1.基本需求
? ?輸入:txt文件
? ?輸出:將txt文件中的字符數、單詞數、行數,統計結果以指定格式輸出到默認文件
2.輸入輸出以及計算規定
? ? ? wc.exe -c file.c ? ? ? ? 返回文件 file.c 的字符數wc.exe -w file.c
? ? ? wc.exe -w file.c ? ? ? ?返回文件 file.c 的單詞總數
? ? ? wc.exe -l file.c ? ? ? ? 返回文件 file.c 的總行數
? ? ? wc.exe -o outputFile.txt???? //將結果輸出到指定文件outputFile.txt
? ? ?空格,水平制表符,換行符,均算字符。
? ? ?由空格或逗號分割開的都視為單詞,且不做單詞的有效性校驗,例如:thi#,that視為用逗號隔開的2個單詞。
? ? ?-c, -w, -l參數可以共用同一個輸入文件,形如:wc.exe –w –c file.c 。
? ? ?-o 必須與文件名同時使用,且輸出文件必須緊跟在-o參數后面,不允許單獨使用-o參數。?
3.PSP
| PSP2.1 | PSP階段 | 預估耗時 (分鐘) | 實際耗時 (分鐘) |
| Planning | 計劃 | 400 | ? |
| · Estimate | · 估計這個任務需要多少時間 | 350 | ? |
| Development | 開發 | 50 | ?60 |
| · Analysis | · 需求分析 (包括學習新技術) | 40 | 90 |
| · Design Spec | · 生成設計文檔 | ?30 | ?60 |
| · Design Review | · 設計復審 (和同事審核設計文檔) | ?30 | ?30 |
| · Coding Standard | · 代碼規范 (為目前的開發制定合適的規范) | ?20 | ?30 |
| · Design | · 具體設計 | ?30 | 40 |
| · Coding | · 具體編碼 | ?60 | 120 |
| · Code Review | · 代碼復審 | ?30 | ?20 |
| · Test | · 測試(自我測試,修改代碼,提交修改) | ?40 | 60 |
| Reporting | 報告 | ?20 | 80 |
| · Test Report | · 測試報告 | ?20 | ?0 |
| · Size Measurement | · 計算工作量 | ?370 | ? |
| · Postmortem & Process Improvement Plan | · 事后總結, 并提出過程改進計劃 | ?30 | ? |
| ? | 合計 | ?400 | ?590 |
4.思路
? 通過java的輸入輸出流讀寫文件,遍歷文件中的每一個字符判斷其中的空格數,換行健,逗號,分好的數目來統計。
5.類
? 1.Util 工具包類提供文件的讀寫
? ?2.WordCount類 判斷文件中的字符數,行數,單詞數
? ?3.CountPrintl類 將結果打印到指定的文件中
? ?4.Test類 單元測試類
? ?5.Client 客戶端?
5.關鍵代碼
??
package Util; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; import java.io.Writer; public class WDUtil {//工具類 負責讀寫工具/*讀取文件* FilePath 文件的路徑* 返回 StringBuffer*/public String fielRead(String FilePath) {File file=new File(FilePath);StringBuffer sb=new StringBuffer();try {FileInputStream fis=new FileInputStream(file);InputStreamReader reader = new InputStreamReader(fis, "UTF-8");while(reader.ready()){sb.append((char)reader.read());}reader.close();fis.close();} catch (Exception e) {e.printStackTrace();}return sb.toString();}/** FilePath 保存文件的路徑* txt 保存的內容*/public void fileWrite(String FilePath,String txt){File file=new File(FilePath);try {FileOutputStream fop=new FileOutputStream(file);OutputStreamWriter writer =new OutputStreamWriter(fop, "utf-8");writer.write(txt);writer.close();fop.close();} catch (Exception e) {// TODO Auto-generated catch block e.printStackTrace();}}}?
package CountWord;import Util.WDUtil;public class CountWord {WDUtil util = new WDUtil();// 讀寫文件的工具對象/** path 文件的路徑 返回文件的總字數*/public int countChar(String path) {int charNum = 0;String words = util.fielRead(path);charNum = words.length();return charNum;}/** path 文件的位置 返回文件中空格的數目*/public int countWord(String path) {int wordNum = 0;String words = util.fielRead(path);for (int i = 0; i < words.length() - 1; i++)// 最后一個字母特殊考慮 {if (words.charAt(i) == ' ' || words.charAt(i) == ';' || words.charAt(i) == ',' || words.charAt(i) == '.')// 出現空格逗號句號分號都算一個單詞 {wordNum++;}}wordNum++;// 最后一個不管是什么字母結尾,單詞數都加1return wordNum;}public int countEnter(String path) {int wordNum = 0;String words = util.fielRead(path);for (int i = 0; i < words.length(); i++) {if (words.charAt(i) == '\n') {wordNum++;}}return wordNum + 1;} } package CountWord;import java.util.Scanner;import Util.WDUtil;/** 根據輸入的命令獲取操作,和文件路徑最后計算結果保存到路徑中*/ public class PrintfCount {CountWord cWord=new CountWord();WDUtil wdUtil=new WDUtil();int charNum=0;//字符的數目int wordNum=0;//單詞的int enterNum=0;//行數public void Print(String[] args){String txt=null;String path=args[args.length-1];for(int i=0;i<args.length;i++){String operation=args[i];switch(operation){case "-c"://計算字符數 {charNum=cWord.countChar(path);System.out.println("字符數為:"+charNum);break;}case "-w"://計算單詞數 {wordNum=cWord.countWord(path);System.out.println("單詞數為:"+wordNum);break;}case "-l"://計算行數 {enterNum=cWord.countEnter(path);System.out.println("行數為:"+enterNum);break;}case "-o":{String result=wdUtil.fielRead("result.txt");wdUtil.fileWrite(args[i+1],result);break;}}}txt="字符的個數為"+charNum+"\n單詞的個數為"+wordNum+"\n行數為"+enterNum;wdUtil.fileWrite("result.txt", txt);}}?
測試總結:1.我不知道table在計算的時候是算一個字符還是多少個,我電腦上算的3個
? ? ? ? ? ? ? ? ? 2.在計算單詞時我覺得以分號,逗號,句號,空格結尾都應該算一個單詞
? ? ? ? ? ? ? ? ? 3.在文章結尾應當默認增加一個單詞
7.相關鏈接
? ?有關博客的使用和排版,:http://www.cnblogs.com/math/p/se-tools-001.html。?
? ? 有關Git的使用,廖雪峰的官方網站。? ? ??
8.最后
? ?非常感謝老師給我們的引導,我一直知道git很神奇也很好用。但是迫于害怕和沒有機會,一直沒有實踐過,謝謝老師給我的資料和實踐的機會。本次博客寫的有點匆忙,有不足之處請多多指教。
?
轉載于:https://www.cnblogs.com/c-lover/p/9694191.html
總結
- 上一篇: 证同测试
- 下一篇: 中秋之晚开始 编程语言学习之路