WordCount
一..需求说明
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++;// 最后一个不管是什么字母结尾,单词数都加1 return 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很神奇也很好用。但是迫于害怕和没有机会,一直没有实践过,谢谢老师给我的资料和实践的机会。本次博客写的有点匆忙,有不足之处请多多指教。