第二周个人作业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 给 ...
随机推荐
- JAVA 中一个非常轻量级只有 200k 左右的 RESTful 路由框架
ICEREST 是一个非常轻量级只有 200k 左右的 RESTful 路由框架,通过 ICEREST 你可以处理 url 的解析,数据的封装, Json 的输出,和传统的方法融合,请求的参数便是方法 ...
- 阿里云API网关(2)开放 API 并接入 API 网关
网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl 网关控制台: https ...
- Spring Security 入门(1-4-1)Spring Security - 认证过程
理解时可结合一下这位老兄的文章:http://www.importnew.com/20612.html 1.Spring Security的认证过程 1.1.登录过程 - 如果用户直接访问登录页面 用 ...
- 判断ssh远程命令是否执行结束
注:这是一个没什么鸟用的功能.不过也算是一种拓展. 通常在那些"一键化部署"的shell脚本中,可能需要使用ssh执行远程命令来实现一些简单的自动化,这些远程命令可能需要执行一段时 ...
- 框架学习之Struts2(三)---OGNL和值栈
一.OGNL概述 1.1OGNL是对象图导航语言(Object-Graph Navigation Languaged)的缩写,他是一种功能强大的表达式语言,通过简单一致的表达式语法,可以存取Java对 ...
- js中的栈与堆的讲解/基本数据类型与引用类型的讲解
1.栈(stack)和堆(heap) stack为自动分配的内存空间,它由系统自动释放:而heap则是动态分配的内存,大小不定也不会自动释放. 2.基本类型和引用类型 基本类型:存放在栈内存中的简单数 ...
- TCP/IP学习笔记:TCP传输控制协议(一)
1 TCP的服务 尽管TCP和UDP都使用相同的网络层(IP),TCP却向用户提供一种面向连接的,可靠地字节流服务.两个使用TCP的应用,在彼此交换数据之前必须先建立一个TCP连接,在一个TCP连接中 ...
- 如何在jenkins的maven项目中,用mvn命令行指定findbugs的黑名单规则文件
一:问题背景 最近在研究jenkins的过程中,针对maven项目,打算添加findbugs进行静态检查,但我不太想在项目的pom中进行修改,最好可以只修改jenkins的job配置,即配置外部化. ...
- Git -> Can't start Git: git.exe
问题描述 导入别人的PyCharm项目后提示:Can't start Git:git.exe 解决办法 Git就是个类似插件,在Git的官网上注册个账号然后每次编译就会自动把程序上传到网上备份.可以方 ...
- [LeetCode] My Calendar III 我的日历之三
Implement a MyCalendarThree class to store your events. A new event can always be added. Your class ...