个人项目(wordCount java)
WordCount.exe(java)
github项目地址:https://github.com/ydkxiu/wordCount
一、题目描述
- 实现一个简单而完整的软件工具(源程序特征统计程序)
- 进行单元测试、回归测试、效能测试,在实现上述程序的过程中使用相关的工具。
- 进行个人软件过程(PSP)的实践,逐步记录自己在每个软件工程环节花费的时间。
二、解题思路描述
寒假在家简单学了下java,还没有实践过.这次作业用到了面向对象的思想,就想到用java来实现,对字符串的处理也简单一些.
三、设计实现过程
主要用了一个主类一个方法类来实现,方法全部存放在方法类中.
四、代码说明
- 统计字符数目
public static void charNum(String inPath) {
int num=0;
try {
FileReader fr = new FileReader(inPath);
BufferedReader br = new BufferedReader(fr);
int a=0;
while((a = br.read()) !=-1) {
if(a!='\n'&&a!='\r') {
num++;
}
}//不是回车或回车换行就算字符
br.close();
fr.close();//关闭流
System.out.println("该文件字符数为"+num);
}catch (IOException e) {
System.out.println("该文件不存在,请重新输入!");
}
}
- 统计行数
public static void lineNum(String inPath) {
String line= null;
int lineNum=0;
try {
FileReader fr = new FileReader(inPath);
BufferedReader br = new BufferedReader(fr);
while((line = br.readLine())!=null) {
lineNum++;//读的到就算一行
}
br.close();
fr.close();
System.out.println("该文件行数为"+lineNum);
} catch (IOException e) {
System.out.println("该文件不存在,请重新输入!");
}
}
- 统计单词数
public static void wordNum(String inPath) {
String line= "";
int wordNum=0;
try {
FileReader fr = new FileReader(inPath);
BufferedReader br = new BufferedReader(fr);
while((line = br.readLine())!=null) {
for(int i=0;i<line.length();i++) {
char c=line.charAt(i);
if(i==line.length()-1 && ((c>='a'&&c<='z')||(c>='A'&&c<='Z')) ){
wordNum++;//如果是该行最后一个字符且是英文字母则单词数+1
}
if((c>='a'&&c<='z')||(c>='A'&&c<='Z')) {
continue;//还是英文字母则继续
}else {
wordNum++;
}
}
}
br.close();
fr.close();
System.out.println("该文件单词数为"+wordNum);
} catch (IOException e) {
System.out.println("该文件不存在,请重新输入!");
}
}
- 返回更复杂的数据(代码行 / 空行 / 注释行)
public static void complexLines(String inPath) {
int blankLines=0;
int commentLines=0;
int codeLines=0;
String line = "";
int flag= 0;
try {
FileReader fr = new FileReader(inPath);
BufferedReader br = new BufferedReader(fr);
while ((line = br.readLine()) != null) {
line = line.trim();
if(flag==1) {
if(line.endsWith("*/")) {
flag=0;
}else {
commentLines++;
}
}else {
if(line.startsWith("/*")){
commentLines++;
}
else if(line.startsWith("//")||line.startsWith("}//")){
commentLines++;
}
else if(line.equals("")) {
blankLines++;
}
else {
codeLines++;
}
}
}
br.close();
fr.close();
System.out.println("该文件的注释行为"+commentLines);
System.out.println("该文件的空白行为"+blankLines);
System.out.println("该文件的代码行为"+codeLines);
} catch (IOException e) {
e.printStackTrace();
}
}
- 递归处理
public static void recursion(File file) {
if(file.isFile()) {
System.out.println(file.getAbsolutePath());
Method.charNum(file.getAbsolutePath());
Method.lineNum(file.getAbsolutePath());
Method.wordNum(file.getAbsolutePath());
}else {
File [] ff=file.listFiles();
for(File fs:ff) {
recursion(fs);
}//递归处理
}
}
- 主函数
public static void main(String[] args){
int flag=1;
Scanner sc = new Scanner(System.in);
String inStr="aaa";
File file=null;
while(flag==1){
System.out.println("请输入命令 ");
if(sc.hasNextLine()){
inStr = sc.nextLine();
}
String[] path = inStr.split(" ");
if(path.length>1) {
file = new File(path[1]);
}
switch(path[0])
{
case"-c":
Method.charNum(path[1]);
break;
case"-w":
Method.wordNum(path[1]);
break;
case"-l":
Method.lineNum(path[1]);
break;
case"-s":
Method.recursion(file);
break;
case"-e":
flag=0;
break;
case"-a":
Method.complexLines(path[1]);
break;
default:
System.out.println("格式错误,请重新输入!");
}
}
}
五、测试运行
- 只有一个字符的文件

- 只有一行的文件

- 只有一个单词的文件

- 复杂的文件

- 递归调用

六、PSP
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | 40 | 40 |
| · Estimate | · 估计这个任务需要多少时间 | 20 | 30 |
| Development | 开发 | 405 | 635 |
| · Analysis | · 需求分析 (包括学习新技术) | 60 | 120 |
| · Design Spec | · 生成设计文档 | 10 | 10 |
| · Design Review | · 设计复审 (和同事审核设计文档) | 0 | 0 |
| · Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 5 | 5 |
| · Design | · 具体设计 | 40 | 40 |
| · Coding | · 具体编码 | 210 | 240 |
| · Code Review | · 代码复审 | 40 | 40 |
| · Test | · 测试(自我测试,修改代码,提交修改) | 40 | 180 |
| Reporting | 报告 | 50 | 60 |
| · Test Report | · 测试报告 | 10 | 10 |
| · Size Measurement | · 计算工作量 | 10 | 10 |
| · Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 30 | 40 |
| 合计 | 495 | 735 |
七、项目总结
刚开始psp预估时以为不用那么久,但实际操作起来却是阻碍一个接一个,自己对java的使用还是十分的生疏,String的方法调用完全不熟练,查了才知道有这么方便快捷的函数.
同时思路也有卡壳,一时间想不到注释行该怎么计算.第一次使用exe4j转jar为exe,出现了相当多的问题,所以在测试和学习新知识方面花了十分多的时间,在打开exe的时候,
一打开就报错,eclipse可以正常使用.我最开始使用的是bufferedreader读取system.in来获取用户输入,结果报空指针异常,多次检查还是如此,不得已换为scanner读取,
发现仍然是报noline错误,最后发现exe4j转exe的时候发现应该点击console 而不是gui才解决问题.同时也简单了解如何使用github管理项目和用markdown编辑博客,
自己还有很多不足,还需要努力努力再努力.

浙公网安备 33010602011771号