第二周个人作业WordCount
1.Github地址
https://github.com/JingzheWu/WordCount
2.PSP表格
| PSP2.1 | PSP阶段 |
预估耗时 (分钟) |
实际耗时 (分钟) |
| Planning | 计划 | 20 | 15 |
| · Estimate | · 估计这个任务需要多少时间 | 20 | 15 |
| Development | 开发 | 500 | 680 |
| · Analysis | · 需求分析 (包括学习新技术) | 60 | 70 |
| · Design Spec | · 生成设计文档 | 30 | 30 |
| · Design Review | · 设计复审 (和同事审核设计文档) | 10 | 10 |
| · Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 10 | 10 |
| · Design | · 具体设计 | 20 | 20 |
| · Coding | · 具体编码 | 300 | 420 |
| · Code Review | · 代码复审 | 30 | 60 |
| · Test | · 测试(自我测试,修改代码,提交修改) | 40 | 60 |
| Reporting | 报告 | 90 | 90 |
| · Test Report | · 测试报告 | 60 | 60 |
| · Size Measurement | · 计算工作量 | 20 | 15 |
| · Postmortem & Process Improvement Plan | · 事后总结,并提出过程改进计划 |
10 | 15 |
| 合计 | 610 | 785 |
3.解题思路
看到题目之后,大致设想了一下解题过程,先实现基本功能,再实现扩展功能,通过I/O流读取带计数文件内容,然后分别统计字符数、单词数以及行数,在设计基础功能时,统计单词数是通过空格和逗号来计算的,但是到后面有个停用词表,所以前面设计的这个方法就不能使用了,需要用到编译原理里面的词法分析的知识。由于很长时间没有写过java程序,好多知识都忘记了,实现的时候,没有设计多个类来实现,而是把这些功能放在了一个文件里,也没有进行封装,看起来有点乱。由于时间有限,到后面发现这个问题之后,也没有时间来重构代码了,所以准备在下次作业时再进行代码重构。
4.程序设计实现过程
程序通过先读取命令字符串,split函数分割,获得参数列表以及文件名等字符串,再根据文件路径读取文件,用I/O流来读取文件内容,调用BufferedReader实例的readLine方法,一次读取文件的一行,然后一行一行进行处理。
5.代码说明
变量定义
int charNum=0;//字符数
int wordNum=0;//单词数
int lineNum=0;//行数
int codeLineNum=0;//代码行数
int emptyLineNum=0;//空行数
int commentLineNum=0;//注释行数
boolean isEmpty=false;
Scanner scanner=new Scanner(System.in);
String cmd;//获取输入的命令字符串
String preCmd;//命令前缀,即wc.exe
ArrayList<String> parameter=new ArrayList<>();//命令参数列表
String filePath;//程序设计语言源文件,即input_file_name
获取参数
while (true) {
cmd=scanner.nextLine();
preCmd=cmd.split(" ")[0];
if (preCmd.equals("wc.exe")){
break;
}else {
System.out.println("命令有误,请重新输入!");
}
}
for (int i=1,cmdLen=cmd.split(" ").length;i<cmdLen-1;i++){
parameter.add(cmd.split(" ")[i]);
}
filePath=cmd.split(" ")[cmd.split(" ").length-1];
读取文件并处理
FileInputStream fileInputStream=new FileInputStream(filePath);
InputStreamReader inputStreamReader=new InputStreamReader(fileInputStream);
BufferedReader bufferedReader=new BufferedReader(inputStreamReader);
String lineStr=bufferedReader.readLine();
while (lineStr==null){
emptyLineNum++;
lineStr=bufferedReader.readLine();
}
while (lineStr!=null){
isEmpty=false;
charNum=charNum+lineStr.length();
String[] charArr=lineStr.split("");
int index=0;
while (charArr[index].equals(" ")||charArr[index].equals(",")){
index++;
if (index==lineStr.length()){
break;
}
}//去掉该行第一个非空格非逗号字符前的空格和逗号
if (!(index==lineStr.length())){
wordNum++;
}else {
emptyLineNum++;
isEmpty=true;
}
if (lineStr.length()-index==1&&(charArr[index]=="{"||charArr[index]=="}")){
emptyLineNum++;
isEmpty=true;
}//如果该行只有一个“{”或者“}”,则算作空行
int index2=index;
for (;index<charArr.length;index++){
if ((charArr[index].equals(" ")||charArr[index].equals(","))&&(!(charArr[index-1].equals(" ")||charArr[index-1].equals(",")))){
wordNum++;
}
}
if (!isEmpty){
boolean commentFlag1=charArr[index2].equals("/")&&charArr[index2+1].equals("/");
boolean commentFlag2=charArr[index2].equals("/")&&charArr[index2+1].equals("*");
boolean commentFlag3=charArr[index2].equals("*")&&charArr[index2+1].equals("/")&&((index2+2==charArr.length)||(charArr[index2+2].equals(" ")));
if (commentFlag1||commentFlag2||commentFlag3){
commentLineNum++;
}else {
codeLineNum++;
}
}
lineNum++;
lineStr=bufferedReader.readLine();
if (lineStr==null){
emptyLineNum++;
lineStr=bufferedReader.readLine();
}
}
6.测试设计过程
wda dad 提示命令有误,重新输入 wc.exe -c qweqwe.asd 提示文件不存在 wc.exe test.c 提示请输入参数 wc.exe -c test.c 输出待测试文件字符数,并存储到result.txt文件中 wc.exe -w test.c 输出待测试文件单词数,并存储到result.txt文件中 wc.exe -l -w -c test.c 输出待测试文件行数、单词数、字符数,并存储到result.txt文件中 wc.exe -w -c test.c -o output.txt 输出待测试文件单词数、字符数,并存储到output.txt文件中 wc.exe -a test.c 输出待测试文件代码行数、空行数、注释行数,并存储到result.txt文件中 wc.exe -s *.c 提示功能开发中 wc.exe -w test.c -e stop.txt 输出待测试文件中除去停用词表单词后的单词数,并存储到result.txt文件中
7.参考文献链接
http://blog.csdn.net/ycy0706/article/details/45457311
第二周个人作业WordCount的更多相关文章
- java第二周的作业
package java第二周学习; import javax.swing.JOptionPane; public class 数学题 { private int a; private int b; ...
- 软件测试第二周个人作业:WordCount
github地址:https:/github.com/muzhailong/wc.git 第一次写博客很不容易,也算是一个好的开始吧. 1. 个人作业要求 作业简述:根据WordCount的需求描 ...
- 第二周个人作业:WordCount
github地址 https://github.com/lzwk/WordCount PSP表格 PSP2.1 PSP阶段 预估耗时(分钟) 实际耗时(分钟) Planning 计划 20 40 · ...
- 第二次结对作业-WordCount进阶需求
原博客 队友博客 github项目地址 目录 具体分工 需求分析 PSP表格 解题思路描述与设计实现说明 爬虫使用 代码组织与内部实现设计(类图) 算法的关键与关键实现部分流程图 附加题设计与展示 设 ...
- Coursera-AndrewNg(吴恩达)机器学习笔记——第二周编程作业
一.准备工作 从网站上将编程作业要求下载解压后,在Octave中使用cd命令将搜索目录移动到编程作业所在目录,然后使用ls命令检查是否移动正确.如: 提交作业:提交时候需要使用自己的登录邮箱和提交令牌 ...
- Coursera-AndrewNg(吴恩达)机器学习笔记——第二周编程作业(线性回归)
一.准备工作 从网站上将编程作业要求下载解压后,在Octave中使用cd命令将搜索目录移动到编程作业所在目录,然后使用ls命令检查是否移动正确.如: 提交作业:提交时候需要使用自己的登录邮箱和提交令牌 ...
- JAVA学习第二周课后作业
Java 的基本运行单位是类.类由数据成员和函数成员组成.变量之间可以相互转换.String是一个类.static是静态.全局的意思.经过测试,Java的枚举类型定义的Size与String一样都不是 ...
- 16级第二周寒假作业H题
快速幂(三) TimeLimit:2000MS MemoryLimit:128MB 64-bit integer IO format:%I64d Problem Description 计算( AB ...
- 16级第二周寒假作业E题
Home_W的位运算4 TimeLimit:2000MS MemoryLimit:128MB 64-bit integer IO format:%I64d Problem Description 给 ...
随机推荐
- Python内置函数(36)——reversed
英文文档: reversed(seq) Return a reverse iterator. seq must be an object which has a __reversed__() meth ...
- python全栈开发-re模块(正则表达式)应用(字符串的处理)
一.概述 就其本质而言,正则表达式(或 RE)是一种小型的.高度专业化的编程语言,要讲他的具体用法要讲一本书!它内嵌在Python中,并通过 re 模块实现.你可以为想要匹配的相应字符串集指定规则:该 ...
- python入门(7)Python程序的风格
python入门(7)Python程序的风格 Python采用缩进方式,写出来的代码就像下面的样子: # print absolute value of an integer: a = 100 if ...
- .net 4种单例模式
转载: https://www.cnblogs.com/dreign/archive/2012/05/08/2490212.html using System; using System.Collec ...
- The python debugger(PDB)的简介
转自:http://www.cnblogs.com/wei-li/archive/2012/05/02/2479082.html 学习Python调试,最好的资料当然是官方文档和(pdb)help了, ...
- .net core 使用阿里云短信发送SMS
阿里云官方的skd(aliyun-net-sdk-core,aliyun-net-sdk-dysmsapi)在dnc中发送短信会出错,nuget上的包貌似也一样不管用.直接改下sdk当然也可以,但就发 ...
- hive:默认允许动态分区个数为100,超出抛出异常:
在创建好一个分区表后,执行动态分区插入数据,抛出了错误: Caused by: org.apache.hadoop.hive.ql.metadata.HiveFatalException: [Erro ...
- 非黑即白--谷歌OCR光学字符识别
# coding=utf-8 #非黑即白--谷歌OCR光学字符识别 # 颜色的世界里,非黑即白.computer表示深信不疑. # 今天研究一下OCR光学识别庞大领域中的众多分支里的一个开源项目的一个 ...
- [bzoj 1293] [SCOI2009] 生日礼物
传送门(bzoj) 传送门(luogu) 题目: Description 小西有一条很长的彩带,彩带上挂着各式各样的彩珠.已知彩珠有N个,分为K种.简单的说,可以将彩带考虑为x轴,每一个彩珠有一个对应 ...
- 【Python3.6+Django2.0+Xadmin2.0系列教程之二】学生信息管理系统(入门篇)
上一篇我们已经创建好了一个Xadmin的基础项目,现在我们将在此基础上构建一个同样很基础的学生信息管理系统. 一.创建模型 模型是表示我们的数据库表或集合类,并且其中所述类的每个属性是表或集合的字段, ...