个人项目 wc.exe
GitHub地址:https://github.com/oAiuo/wordCount
一、题目描述
Word Count
1. 实现一个简单而完整的软件工具(源程序特征统计程序)。
2. 进行单元测试、回归测试、效能测试,在实现上述程序的过程中使用相关的工具。
3. 进行个人软件过程(PSP)的实践,逐步记录自己在每个软件工程环节花费的时间。
二、项目要求
wc.exe 是一个常见的工具,它能统计文本文件的字符数、单词数和行数。这个项目要求写一个命令行程序,模仿已有wc.exe 的功能,并加以扩充,给出某程序设计语言源文件的字符数、单词数和行数。
实现一个统计程序,它能正确统计程序文件中的字符数、单词数、行数,以及还具备其他扩展功能,并能够快速地处理多个文件。
具体功能要求:
程序处理用户需求的模式为:
wc.exe [parameter] [file_name]
基本功能列表:
wc.exe -c file.c //返回文件 file.c 的字符数
wc.exe -w file.c //返回文件 file.c 的词的数目
wc.exe -l file.c //返回文件 file.c 的行数
说明:我在项目中file_name的定义为文件的路径
三、解题思路
看到要求时,涉及文件的操作,就联想到java的IO流操作。
- 统计文件字符数,使用字符输入流中的read方法可以得到该次read操作获取的字符数,重复操作即可。
- 统计单词数,则使用字符输入流中的readLine方法,获取一行的内容,对该字符串使用空格进行分割成字符串数组,则得到一行的单词数,重复操作即可。
- 统计行数,则同样使用readLine方法,统计该方法的使用次数即可。
四、设计实现过程
将文件的File对象、字符输入流和三个统计方法组成一个类,然后在main方法里,对命令行输入格式进行处理,读入文件的路径字符串生成对象,然后使用switch语句,运行不同的统计方法。
五、代码说明
0、定义的类的属性及构造器
private File src;
private BufferedReader input; public FileClass(String src) {
this.src = new File(src);
try {
this.input = new BufferedReader(new FileReader(src));
} catch (FileNotFoundException e) {
System.out.println("File Not Found...\n");
} }
1、统计字符数
public void charNumCount() throws IOException {
if(input == null)
input = new BufferedReader(new FileReader(src));
int charNum = 0, num = 0;
char[] buffer = new char[1024];
while( (num = input.read(buffer)) != -1 ) {
charNum += num;
System.out.println(buffer);
}
System.out.println("charNum : " + charNum );
input.close();
input = null;
}
说明:定义一个缓冲字符数组,字符输入流的read(char[])方法可将读取到的内容存入该字符数组中,并返回读取到的字符数,每次累加该数即可。
由于统计的是文本文件,在文件的末尾有结束符,最后会返回-1,即读取结束。
另有发现,windows系统的换行符的确是"\r\n",有换行的情况的话,换行符会记为两个字符。
2、统计单词数
public void wordNumCount() throws IOException {
if(input == null)
input = new BufferedReader(new FileReader(src));
int wordNum = 0;
String str = null;
while( (str = input.readLine()) != null ) {
String[] arr = str.split("\\s+");
for(String temp : arr) {
System.out.println("word: " + temp);
wordNum++;
}
}
System.out.println("wordNum : " + wordNum );
input.close();
input = null;
}
说明:采用readLine()方法读取到一行的内容,然后使用split方法,以空格为分隔符分割字符串,得到字符串数组,统计一行中单词的个数,重复读取每行内容即可。
3、统计行数
public void lineNumCount() throws IOException {
if(input == null)
input = new BufferedReader(new FileReader(src));
int lineNum = 0;
while( input.readLine() != null )
lineNum++;
System.out.println("lineNum : " + lineNum );
input.close();
input = null;
}
说明:同样采用readLine方法读取每一行的内容,当返回的内容为null时,即到文本末尾,变量存储读取成功的次数即可。
4、main方法
public static void main(String[] args) throws IOException {
if( args.length != 2)
{
System.out.println("-c filePath return charNum");
System.out.println("-w filePath return wordNum");
System.out.println("-l filePath return lineNum");
}
else {
FileClass file = new FileClass(args[1]);
switch(args[0]) {
case "-c" :
file.charNumCount();
break;
case "-w" :
file.wordNumCount();
break;
case "-l" :
file.lineNumCount();
break;
default :
System.out.println("-c filePath return charNum");
System.out.println("-w filePath return wordNum");
System.out.println("-l filePath return lineNum");
}
}
}
说明:main方法参数即为命令行参数,对输入的参数进行合法性检验,并根据输入的功能选择不同的统计方法。
六、测试运行
1、空文件

2、单字符文件

3、一行文件

4、典型文件

七、PSP
|
PSP2.1 |
Personal Software Process Stages |
预估耗时(分钟) |
实际耗时(分钟) |
|
Planning |
计划 |
30 |
45 |
|
· Estimate |
· 估计这个任务需要多少时间 |
20 |
30 |
|
Development |
开发 |
1440 |
1400 |
|
· Analysis |
· 需求分析 (包括学习新技术) |
180 |
300 |
|
· Design Spec |
· 生成设计文档 |
20 |
30 |
|
· Design Review |
· 设计复审 (和同事审核设计文档) |
10 |
10 |
|
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
30 |
20 |
|
· Design |
· 具体设计 |
120 |
100 |
|
· Coding |
· 具体编码 |
900 |
780 |
|
· Code Review |
· 代码复审 |
120 |
120 |
|
· Test |
· 测试(自我测试,修改代码,提交修改) |
60 |
40 |
|
Reporting |
报告 |
120 |
80 |
|
· Test Report |
· 测试报告 |
60 |
30 |
|
· Size Measurement |
· 计算工作量 |
30 |
30 |
|
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
30 |
20 |
|
合计 |
1610 |
1555 |
八、总结
- 经过这次项目,体会了软件开发的一个具体流程,对软件开发工程化有了一个比较具体的了解;
- 查阅资料时,有时可能会跑偏,点开的链接较多,总抓不住重点,时间浪费较多;
- 这次只完成了基础功能,编程能力有待提高。
个人项目 wc.exe的更多相关文章
- 个人项目WC.exe Node.js+electron实现
前言 实现语言:Javascript 编译工具:webstorm GitHub:https://github.com/NPjuan/WC.git 项目要求 wc.exe 是一个常见的工具,它能统计文本 ...
- 软工个人项目 ——wc.exe
1.GitHub项目地址 https://github.com/k8kiw/WordCount 2.PSP预计时间 PSP2.1 Personal Software Process Stages 预估 ...
- 个人项目-WC.exe (Java实现)
一.Github项目地址:https://github.com/blanche789/wordCount/tree/master/src/main/java/com/blanche 二.PSP表格 P ...
- 软工个人项目———WC.exe(Java实现)
一.github地址 https://github.com/hhw-15521301615/hello-world 二.PSP表格 PSP2.1 Personal Software Process S ...
- 软工作业1:wc.exe项目开发(java)
Github地址:https://github.com/Zzhaomin/learngit 项目相关要求 : wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个 ...
- 个人项目(WC.exe)(java)(基于图形界面)
一.Github项目地址:https://github.com/Leungdc/ENhomework 二.PSP: PSP2.1 Personal Software Process Stages 预估 ...
- 个人项目作业(wc.exe)
1.GitHub项目地址 https://github.com/QiuBin666/WC 项目介绍: 题目描述 Word Count1. 实现一个简单而完整的软件工具(源程序特征统计程序).2. 进行 ...
- 个人项目作业——wc.exe
一.Github项目地址 https://github.com/PIPIYing/wc 二.项目概况 项目描述 Word Count 1. 实现一个简单而完整的软件工具(源程序特征统计程序). 2. ...
- 个人项目(wc.exe)
一.项目在GitHub上的地址: ·https://github.com/DawsonHuang/Word_Count 二.项目描述: ·项目名:WordCount(以下简称WC或项目) ·项目简述: ...
随机推荐
- Markdown试用
目录 今天又是充满希望的一天 一.是什么 二.为什么 三.怎么做 代码 这世界上好人坏人都很多,我不是一个坏人. 我不是个英雄,我只是个拿
- c# 导出excel的两种常见方法
1,不是用第三方插件(html直接输出) StringBuilder ssb = new StringBuilder(); StringBuilder sb = new StringBuilder() ...
- js Number方法总结
Number构造属性 Number.EPSILON // 两个可表示(representable)数之间的最小间隔. Number.MAX_SAFE_INTEGER // JavaScript 中最大 ...
- JAVA-阿里云短信服务
1.引入相关依赖 <!--lombok--> <dependency> <groupId>org.projectlombok</groupId> < ...
- 面试官:说说你对css效率的理解
大家好,我是小雨小雨,致力于分享有趣的.实用的技术文章. 内容分为翻译和原创,如果有问题,欢迎随时评论或私信,希望和大家一起进步. 大家的支持是我创作的动力. 选择器的优先级 众所周知,选择器是有权重 ...
- ES6编译问题SyntaxError: Unexpected token import
遇到SyntaxError: Unexpected token import 如何解决 ??? 究其原因是node es6问题这还不够,因为我们没有去配置babel,所以我们需要在.babelrc去做 ...
- Caused by: java.lang.IllegalArgumentException
Caused by: java.lang.IllegalArgumentException 是因为jdk较高而项目需要的是低版本的问题 1.将idea或idea里的语言级别调到适合自己项目的版本比如安 ...
- Comparing Data-Independent Acquisition and Parallel Reaction Monitoring in Their Abilities To Differentiate High-Density Lipoprotein Subclasses 比较DIA和PRM区分高密度脂蛋白亚类的能力 (解读人:陈凌云)
文献名:Comparing Data-Independent Acquisition and Parallel Reaction Monitoring in Their Abilities To Di ...
- jquery 获取url携带的参数
url= "/page/employee/employeeUpdate.html?id="+data.id 获取 url携带的参数 -> $.getUrlParam = fu ...
- win7 win10 更换电脑盘符的图标
效果如下 第一步 -> 1.把文件全放到盘符住目录 2.如果需要更换图标 (文件最好是ICO后缀的) 打开 Autorun 文件并编辑 第二步 -> 重启电脑就完了 下载连接 已经放到码 ...