1.作业成果

代码地址:https://gitee.com/easy-yy/first_homework_wc

2.作业要求

作业简述:根据WordCount的需求描述,先编程实现,再编写单元测试,最后撰写博客。实现以下需求说明中的基本功能。

3. WordCount需求说明

WordCount的需求可以概括为:对程序设计语言源文件统计字符数、单词数、行数,统计结果以指定格式输出到默认文件中,以及其他扩展功能,并能够快速地处理多个文件。

可执行程序命名为:wc.exe,该程序处理用户需求的模式为:

wc.exe [parameter] [input_file_name]

存储统计结果的文件默认为result.txt,放在与wc.exe相同的目录下。

3.1 基本功能

wc.exe -c file.c     //返回文件 file.c 的字符数

wc.exe -w file.c     //返回文件 file.c 的单词总数

wc.exe -l file.c     //返回文件 file.c 的总行数

wc.exe -o outputFile.txt     //将结果输出到指定文件outputFile.txt

注意:

空格,水平制表符,换行符,均算字符。

由空格或逗号分割开的都视为单词,且不做单词的有效性校验,例如:thi#,that视为用逗号隔开的2个单词。

-c, -w, -l参数可以共用同一个输入文件,形如:wc.exe –w –c file.c 。

-o 必须与文件名同时使用,且输出文件必须紧跟在-o参数后面,不允许单独使用-o参数。 

5.编码过程

PSP表格

PSP2.1 PSP阶段 预估耗时(分钟) 实际耗时(分钟)
· Planning · 计划 20 30
· Estimate · 估计这个任务需要多少时间 30 15
· Development · 开发 100 0
· Analysis · 需求分析 (包括学习新技术) 5 5
· Design Spec · 生成设计文档 5 5
· Design Review · 设计复审 (和同事审核设计文档) 0 0
· Coding · 代码规范 (为目前的开发制定合适的规范) 0 0
· Code Review · 具体设计 50 20
· Test · 具体编码 30 100
· Reporting · 代码复审 20 10
· Test Report · 报告 30 50
· Size Measurement · 测试报告 30 0
· Postmortem & Process · 计算工作量 20 0
· Improvement Plan · 事后总结, 并提出过程改进计划 20 0
  · 合计 360 235


6.IDE环境

Windows 10 + eclipse

7.程序设计

设计了2个类来完成这项任务
wcfunction:写入其中代码字符数,词数和行数的方法。
wctest:写入主函数main,并写出测试上面3个方法的测试代码。

 

8.关键代码说明

8.1行数统计

//文件行数统计函数
    int getlinenumber(String filename) throws IOException {
        int linenum = 0;
        File file = new File(filename);
        if(file.exists()) {
            //读取文件
            FileReader fr = new FileReader(filename);
            //读取文件行数
            LineNumberReader lnr = new LineNumberReader(fr);
            while(lnr.readLine()!= null) {
                linenum=lnr.getLineNumber();
            }
            lnr.close();
            fr.close();
        }else {
            System.out.println("文件不存在,请重新输入文件!");
        }
        return linenum;
    }        

 

8.2字符数统计

//文件字符统计函数
    int getCharacternumber(String filename) throws IOException {
        int number = 0;
        String[] strword = null;
        File file = new File(filename);
        if(file.exists()) {
            //读取文件
            FileReader fr = new FileReader(filename);
            br = new BufferedReader(fr);
            String line = null;
            String str=null;
            StringBuffer sbf = new StringBuffer();
            while((line=br.readLine())!= null) {
                sbf.append(line);
                str = sbf.toString();
                strword = str.split("\\s+");
            }
            for(int i=0;i<strword.length;i++) {
                Pattern pattern = Pattern.compile("[0-9a-zA-Z]*");
                Matcher matcher = pattern.matcher(strword[i]);
                if(matcher.find()) {
                    number+=matcher.regionEnd();
                }
            }
            br.close();
            fr.close();
        }else {
            System.out.println("文件不存在,请重新输入文件!");
        }
        return number;
    }

 

8.3 词数统计

    //文件词统计函数
    int getwordnumber(String filename) throws IOException {
        int num=0;
        String[] strword = null;
        File file = new File(filename);
        if(file.exists()) {
            //读取文件
            FileReader fr = new FileReader(filename);
            br = new BufferedReader(fr);
            String line = null;
            StringBuffer sbf = new StringBuffer();
            while((line=br.readLine())!= null) {
                sbf.append(line);
                String str = sbf.toString();
                //正则表达式替换符号
                str = str.replaceAll("[\\p{Nd}\\u9fa5-\\uffe5\\p{Punct}\\s&&[^-]]", " ");
                //按空格将内容分割
                strword = str.split("\\s+");
                num=strword.length;
            }
            br.close();
            fr.close();
        }else {
            System.out.println("文件不存在,请重新输入文件!");
        }
        return num;
    }

 

 

9.测试结果

测试结论

  • 1、缺少相应的提示性语言来告诉使用者运行结果。
  • 2、麻烦的是,需要手动输入测试的文件地址。
  • 3.其中问题在于:将输出结果转为txt时候出现问题,还没有来得及修改。 

10.参考文章

https://www.cnblogs.com/K-mengmengpi/p/9614405.html 

posted on 2018-09-23 14:23  Easy丶yy  阅读(347)  评论(4编辑  收藏  举报