博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第二周作业WordCount
阅读量:7012 次
发布时间:2019-06-28

本文共 6683 字,大约阅读时间需要 22 分钟。

github地址:

https://github.com/DouglasLee001/softTest

一.PSP表格 

 

PSP2.1

PSP阶段

预估耗时

(分钟)

实际耗时

(分钟)

Planning

计划

 10分钟  20分钟

· Estimate

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

 2天  1天

Development

开发

 1天  1天

· Analysis

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

 0.5天  1天

· Design Spec

· 生成设计文档

 -  -

· Design Review

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

 -  -

· Coding Standard

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

 20分钟  20分钟

· Design

· 具体设计

 2小时  3小时

· Coding

· 具体编码

 0.5天  10小时

· Code Review

· 代码复审

 0.5天  0.5天

· Test

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

 0.5天  0.5天

Reporting

报告

 30分钟  30分钟

· Test Report

· 测试报告

 30分钟  1小时

· Size Measurement

· 计算工作量

 2小时  1小时

· Postmortem & Process Improvement Plan

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

 1小时  0.5小时
 

合计

 6天  4天半

二.解题思路

1.首先这个作业是需要在控制台进行操作的,所以在编写程序时应该从main函数的args[]中传入参数

2.其次这个作业的基本要求是要统计出字符数,行数,单词数以及要能指定输出文件夹,

  (1)因此对于字符数可以选择直接将每一行的内容存在一个string里面,用length()函数读出,并且需要注意的是,因为换行是算字符的,因此需要加上行数-1;

  (2)对于行数可以选择将内容读进一个string的动态数组后统计动态数组的长度

  (3)对于单词数目可以选择将每一行的内容存在一个string中,然后在每一行之间加上“ ”,最后用java自带的split函数将这个长字符串切分成短的string,每个string就是一个单词

3.作业的拓展功能是要实现停用词表和递归查找以及复杂的数据结构

  (1)递归使用一下深搜就可以实现

  (2)停用词表的实现可以使用一下set功能,查找一下对应的单词是否在set中

  (3)注释行和空行,代码行的解决详见代码注释

4.至于最后打包成.exe文件可以参考:https://jingyan.baidu.com/article/2a138328f3e2b0074a134ffe.html

三.程序设计实现过程

private static void error(String err)报错函数
private static ArrayList
fileContent(String filepath) 输入文件路径,并且返回这个路径下的每一行的内容,将每一行的内容放进一个string类型的动态数组
private static String[] cutToWord(String filePath)将文件中的每一行都加到一行中去,然后在行与行之间用空格隔开,最后将这一行字符串根据空格,"\t","\n"分开成一个字符串数组, 就是单词的集合
private static Set
banWord(String banlistFile)将所有的停用表中的内容放到一个set中去,既保证了不重复,又可以方便查询
private static int countWord(String str, Set
banWords)数单词的函数
private static int sumChar(String[] contents)数字符的函数
private static int[] lines(String[] contents)返回行数的函数
private static class Argstransit类:将命令行中输入的内容转换成对应类的参数
private static void confirm(String filepath)确定文件路径是否存在,如果不存在的话就创建一个加上去,用于创建输出文件的时候
private static void count(String filepath, Argstransit po, PrintWriter out)将信息放在Argstransit这个类中传递过来,再根据其上的内容信息来调用上面的各个函数
private static void findDownfiles(String dir,String filepath)递归寻找所有的文件
public static void main(String[] args) 主函数

四.代码说明

private static void findDownfiles(String dir,String filepath)
//递归寻找所有的文件,    private static void findDownfiles(String dir,String filepath) {//作为深搜        File fp=new File(dir);        for(File f :fp.listFiles()){            if(f.getName().matches(filepath)&&f.isFile()){//如果是一个文件,并且这个文件的名字和输入的名字相同,就插入但动态数组末尾                fls.add(dir+f.getName());            }            else if(f.isDirectory())//如果是一个文件夹,那么就搜索下面的文件                findDownfiles(dir+f.getName()+"/",filepath);        }    }
private static int[] lines(String[] contents)
private static class Argstransit {        Boolean c = false;        Boolean w = false;        Boolean l = false;        Boolean s = false;        Boolean a = false;        Boolean o = false;        Boolean e = false;        String filePath;        String outPath;        String banPath;        //int filepathNum=0;        Argstransit(String[] args) {            for (int i = 0; i < args.length; i++) {                if(args[i].charAt(0) == '-' && args[i].length() < 3) {                    switch (args[i].charAt(1)) {                        case 'w': this.w = true;break;// 如下来判定是否有输入对应的内容                        case 'l': this.l = true;break;                        case 's': this.s = true;break;                        case 'a': this.a = true;break;                        case 'c': this.c = true;break;                        case 'o':                            this.o = true;                            i++;                            if(i < args.length) {                                this.outPath = args[i];//o之后要紧跟着输出表                                //File fp=new File(this.outPath);                            }                            else {                                error("未找到输出表");//如果“-o”之后就已经结束,那么就是没有输入输入表                                this.o = false;                            }                            break;                        case 'e':                            this.e = true;                            i++;                            if(i < args.length) {                                File fp=new File(args[i]);                                if(!fp.exists())                                    error("未找到停用词表");//如果后面的内容不是一个已经存在的文件,那么就报错                                else                                    this.banPath = args[i];//e之后要紧跟着停用表                            }                            else error("未找到停用词表");//如果-e之后后面没有内容了,就报错                            break;                        default: break;                    }                } else {                    this.filePath = args[i];                    System.out.print(filePath);                }            }        }    }
private static int[] lines(String[] contents)
//返回linecount{代码行,空行,注释}    private static int[] lines(String[] contents) {        int[] linecount = {0, 0, 0};        for (String line : contents) {            if(line.trim().length() <= 1) {//去掉了前后的空格,然后再统计总共有多少个字符,如果小于2就是空行                linecount[1]++;            } else {                if(!line.trim().contains("//")) {                    linecount[0]++;//如果没有"//"那一定是代码行                } else if(line.replaceAll(" ", "").indexOf("//") > 1) {                    linecount[0]++;//如果有"//",但是去掉了所有空格后发现"//"的位置在第三个或者之后,是代码行                } else if(line.contains("//")) {                    linecount[2]++;//否则是注释行,也就是"//"在第一个位置或者第二个位置                }            }        }        return linecount;    }

五.测试设计过程

对于java文件测试命令行设计:

java WordCount -c case1.c -o output1://针对没有空格没有换行的情况做的只统计字符数的“冒烟测试”java WordCount -c -l -w  case1.c -o output2:针对输入中没有换行没有空格的所有基础功能测试java WordCount -c -l -w case2.c -o output3.txt://针对输入中含有空格的所有基础功能测试java WordCount -c -l -w case3.c -o 3.c   -o output4.txt://针对输入中含有空格和换行的所有基础功能测试java WordCount -a case4.c -o output5.txt://针对(代码行 / 空行 / 注释行)的测试java WordCount -s -c  case5.c  -o output6.txt//:针对递归寻找文件“-s”的测试java WordCount -s -c -a case5.c -o output7.txt://针对递归寻找文件s功能和其他扩展功能如a,以及基本功能如c的集成的测试java WordCount -c -w -e stoplist.txt  case6.c -o output8.txt://针对停用词表的测试java WordCount -c -w -l -s -a -e stoplist.txt case7.c -o output9.txt://针对所有的功能的测试java WordCount -c -w://对于没有文件名的测试java WordCount -c case10.c://对于文件名不存在的测试java WordCount -c case1.c -e://-e之后没有停用词表WordCount -c case1.c -e st.txt://停用词表不存在的情况java WordCount -c case1.c -o://输出符号“-o”之后没有紧跟输出文件位置

对应的测试结果在

github中BIN中的

output1.txt  output2.txt  output3.txt  output4.txt  output5.txt  output6.txt  output7.txt  output8.txt  output9.txt 

六.参考链接

1. 

2. 

3.https://jingyan.baidu.com/article/2a138328f3e2b0074a134ffe.html

4. 

5.

6.

7.少部分方法参考:,并在参考后重写

转载于:https://www.cnblogs.com/lee17015/p/8611868.html

你可能感兴趣的文章
ActiveMQ问题分析和解决
查看>>
Day-3 使用记事本编写第一个Java程序
查看>>
企业该如何选择邮件系统
查看>>
Tcl或sh调用 exec调用管道”|”和awk的注意事项 + shell返回值如何赋值给tcl变量
查看>>
MyEclipse2015编辑窗皮肤设置
查看>>
js的模块封装(二)
查看>>
常用linux命令
查看>>
停驻脚步回头看,原来我会的都是浮云系列一-------java之jdbc操作mysql
查看>>
Web启动EXE程序
查看>>
svn强制要求提交注释
查看>>
JDBC编程步骤
查看>>
微服务系统架构图
查看>>
Spring的AOP前置,后置,运行,异常
查看>>
在团800运维工作总结之jumpserver分析代码,新加功能
查看>>
有那么一首歌
查看>>
Linux系统时间查看及设定
查看>>
北软教育TPI教学方法及过程说明
查看>>
X3850 X5安装ESXI6.0U3需要手动加载LPe11000驱动
查看>>
Kafka学习笔记——使用Kafka记录APP的操作日志
查看>>
abstract关键字
查看>>