wordcount java分析_WordCount( Java )

一. 题目描述

实现一个简单而完整的软件工具(源程序特征统计程序)。

进行单元测试、回归测试、效能测试,在实现上述程序的过程中使用相关的工具。

进行个人软件过程(PSP)的实践,逐步记录自己在每个软件工程环节花费的时间。

二.项目要求

wc.exe 是一个常见的工具,它能统计文本文件的字符数、单词数和行数。这个项目要求写一个命令行程序,模仿已有wc.exe 的功能,并加以扩充,给出某程序设计语言源文件的字符数、单词数和行数。

实现一个统计程序,它能正确统计程序文件中的字符数、单词数、行数,以及还具备其他扩展功能,并能够快速地处理多个文件。

具体功能要求:

程序处理用户需求的模式为:wc.exe [parameter] [file_name]

三.解题思路

题目涉及文件的读取解析,选择java程序设计语言主要使用io流部分知识解决较为简单。

关于java程序转化为exe文件,及命令参数存储在args中相关知识参考网上知识即可解决

四.设计实现及代码说明

将各功能模块封装进WordCount类,再由主函数调用实现相应功能

选用BufferedInputStream和BufferedOutputStream,利用缓冲可以加快效率和速度

实现流程为:

读取文件信息

处理文件信息

将结果写入文件

public class WordCount {

//统计字符数

public void CountChars() throws IOException

{

...

}

//统计总行数

public void CountLines() throws IOException

{

...

}

//返统计总词数

public void CountWords() throws IOException

{

...

}

//统计 代码行/空行/注释行 的行数

public void CountLinesByKind()throws IOException

{

...

}

//使用停用词文件 统计单词个数

public void CountWordsWithLimite() throws IOException

{

...

}

}

关键代码:

public class Main {

· · ·

public static void analyseCommand(String[] args) throws IOException

{

· · ·

if(args.length==0)//需要用户输出参数

{

System.out.println("Command codes are needed !");

}

else

{

for(int i=0;i

{

commands.add(args[i]);

if(!args[i].matches("^-.*"))//不是命令符号

{

if(args[i].contains("."))//是文件名或目录

{

if(!new File(args[i]).exists())//文件不存在

{

System.out.println("The file named "+args[i]+" does not exist");

System.exit(0);

}

else

{

commandsList.add(commands);

commands=new ArrayList<>();

}

}

else//指令有错

{

System.out.println("The "+(i+1)+"th code("+args[i]+") must begin with '-'");

System.exit(0);

}

}

}

}

commandAction(commandsList);

}

public static void commandAction(List> commandList) throws IOException

{

· · ·

for(List commands:commandList)

{

if(commands.contains("-o"))

{

output=commands.get(commands.size()-1);

}

else if(commands.contains("-e"))

{

stop=commands.get(commands.size()-1);

}

else

{

input=commands.get(commands.size()-1);

}

}

WordCount wc=new WordCount(input,stop,output);

for(List commands:commandList)

{

for(int i=0;i

{

switch(commands.get(i))

{

case "-c":wc.CountChars();

break;

case "-w":wc.CountWords();

break;

case "-l":wc.CountLines();

break;

case "-s":wc.CountLinesByKind();

break;

case "-e":wc.CountWordsWithLimite();

break;

case "-o":break;

default:System.out.println("No such command code");

}

}

}

}

}

//代码行/空行/注释行 的行数

public void CountLinesByKind()throws IOException

{

. . .

while((strLine=input.readLine())!=null)

{

all_lines++;

strLine.replaceAll("\r", "");//去除换行符和空格 便于后面操作

strLine.replaceAll("\n", "");

strLine=strLine.trim();

strLine.replaceAll(" ", "");

if(InNoteLines==true)

{

note_lines++;

if(strLine.endsWith("*/")||strLine.endsWith("*/}"))

{

InNoteLines=false;

}

}

else if(strLine.startsWith("/*")||strLine.startsWith("{/*")) //进入注释行

{

note_lines++;

if(!strLine.endsWith("*/")&&!strLine.endsWith("*/}"))//本行未注释结束

{

InNoteLines=true;

}

}

else if(strLine.startsWith("//")||strLine.startsWith("{//"))

{

note_lines++;

}

else if(strLine.equals("")||strLine.equals("{")||strLine.equals("}"))

{

blank_lines++;

}

}

code_lines=all_lines-blank_lines-note_lines;

...

}

五.测试运行

我们建立起一系列测试文件。如下:

空文件

只有一个字符的文件

只有一个词的文件

只有一行的文件

一个典型的源文件

985423443d9bec13fb8a2fb9fda18a05.png

测试结果如下:

9c4d1382ceeb8e33c3f6983465657291.png

6e6f48694184f5df0410e2f3480919dd.png

22301852aa0130997090f7a7fa3f1043.png

ebea0dc55ee46947a7909a419d060bec.png

e63626adeca59288fabad51dc4d29b7a.png

六.项目总结

PSP2.1

Personal Software Process Stages

预估耗时(分钟)

实际耗时(分钟)

Planning

计划

30

15

· Estimate

· 估计这个任务需要多少时间

300

320

Development

开发

230

275

· Analysis

· 需求分析 (包括学习新技术)

30

15

· Design Spec

· 生成设计文档

10

10

· Design Review

· 设计复审 (和同事审核设计文档)

10

5

· Coding Standard

· 代码规范 (为目前的开发制定合适的规范)

10

10

· Design

· 具体设计

10

10

· Coding

· 具体编码

120

180

· Code Review

· 代码复审

10

15

· Test

· 测试(自我测试,修改代码,提交修改)

30

20

Reporting

报告

40

30

· Test Report

· 测试报告

20

10

· Size Measurement

· 计算工作量

10

10

· Postmortem & Process Improvement Plan

· 事后总结, 并提出过程改进计划

10

10

合计

300

320

计划计划时间比实际计划时间短,动手开发时间比计划开发时间长

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值