zoukankan      html  css  js  c++  java
  • 软件工程第三篇

    这个作业属于哪个课程 软件-2018级计科二班
    这个作业要求在哪里 作业要求
    这个作业的目标 学习使用码云
    学号 20188442
    参考文献 eclipse中使用码云
    参考文献 正则表达式

    文章主体

    文章主体

    码云项目地址

    PSP表格

    PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
    Planning 计划 30 40
    • Estimate • 估计这个任务需要多少时间 30 30
    Development 开发 30 40
    • Analysis • 需求分析 (包括学习新技术) 20 30
    • Design Spec • 生成设计文档 30 35
    • Design Review • 设计复审 20 25
    • Coding Standard • 代码规范 (为目前的开发制定合适的规范) 30 35
    • Design • 具体设计 60 80
    • Coding • 具体编码 120 150
    • Code Review • 代码复审 30 20
    • Test • 测试(自我测试,修改代码,提交修改) 10 15
    Reporting 报告 25 30
    • Test Repor • 测试报告 25 30
    • Size Measurement • 计算工作量 20 30
    • Postmortem & Process Improvement Plan • 事后总结, 并提出过程改进计划 10 20
    合计 490 560

    解题思路描述

    1.判断输入参数
    2.判断输入文件和输出文件是否存在,输入文件不存在则结束程序输出提示信息。输出文件不存在则依照参数创建一个新的输出文件。
    3.统计单词总数:因为单词要求——至少以4个英文字母开头,跟上字母数字,且以分隔符分割,不区分大小写。所以考虑使用正则表达式来判定单词。
    4.统计有效行数:采取了跟统计单词总数一样采取正则匹配的方法。
    5.统计单词输出频率:通过查取资料后采取了使用HashMap保存单词和使用频率

    代码规范连接

    计算模块接口的设计与实现过程

    1.四个主要函数功能

    public Lib(String inputFile, String outputFile) //输入文件地址 输出文件地址
    
    public void handleFile() //调用
    
    public String readFile() //读取文件
        
    public void countCharacter(String str) //计算字符数
        
    public void countLine(String str)  //计算有效行数
        
    public void countWord(String str) //计算单词数
    
    public void sortWords()  //单词排序
    
    public void setOutputFile() //写入输出文件
    

    2.文件读取:使用BufferedReader的reader()方法
    文件写入:使用BufferedWriter的writer()方法

     BufferedReader reader = new BufferedReader(new FileReader(inputFile));
     BufferedWriter writer = new BufferedWriter(new FileWriter(outputFile));
    
    1. 统计字符数
    try {
                String str = null;
                while ((str = in.readLine()) != null) {  //readLine()方法, 用于读取一行,只要读取内容不为空就一直执行
                    Number_of_characters += str.length();  //用于统计总字符数
                }
                //System.out.println("该文本共有" + Number_of_characters + "个字符");  //输出总的字符数
            } catch (IOException e) {
                e.printStackTrace();
            }
            return Number_of_characters;
        }
    

    4.统计文件的单词总数
    (对应输出第二行),单词:至少以4个英文字母开头,跟上字母数字符号,单词以分隔符分割,不区分大小写。
    先通过某种方法切分字符串,再过滤掉不符合格式的单词,不同方法性能有差距。可以使用StringTokenizer搭配正则表达式,逐个切分、匹配、计入有效单词。

    String[] list = str.split("[^A-Za-z0-9]"
    

    5.统计文件中各单词的出现次数
    (对应输出接下来10行),最终只输出频率最高的10个。(值降序,值相同的键字典序靠前的优先)将上一步中得到的单词频度HashMap通过排序,返回一个用于输出的频度列

    private Map<String, Integer> map;
    public List<Map.Entry<String, Integer>> wordsRank;
    public void sortWords() {
        wordsRank = new ArrayList<>(map.entrySet());
        Comparator<Map.Entry<String, Integer>> comparator = 
            (o1, o2) -> o2.getValue()- o1.getValue();
        wordsRank.sort(comparator);
    }
    

    计算模块接口部分的性能改进

    读取文件刚开始想到的是FileReader一个字节一个字节的读,但是其实有一次读取整个文本发现可以用FileInputStream而且速度很快。所以第二种是个不错的选择。

    计算模块部分单元测试展示

    只需要统计Ascii码,汉字不需考虑
    空格,水平制表符,换行符,均算字符
    统计文件的单词总数(对应输出第二行),单词:至少以4个英文字母开头,跟上字母数字符号,单词以分隔符分割,不区分大小写。
    英文字母: A-Z,a-z
    字母数字符号:A-Z, a-z,0-9
    分割符:空格,非字母数字符号
    这个还在摸索中......

    计算模块部分异常处理说明

    就是数值边界异常

    心路历程与收获

    刚开始对于这个作业很愁,因为本来就不喜欢读文字,看到这么多难理解的文字特别反感,但是回头想想,要是以后工作后,这可能都是再正常不过的事情了,所以内心就平静了很多,但是这个给我最大的感受就是他能够看出一个人的学习能力,如果学习能力强那么这将是简简单单而且很有乐趣,虽然我没有强烈的感觉,但是内心确有不同的感受,只能说做这件事的收获由内心决定,自我感觉良好。

  • 相关阅读:
    base64编码
    URL编码和解码
    Android MineType
    Gzip压缩
    关于文件与文件系统的压缩与打包命令-Linux(笔记)
    tesseract的编译安装
    HDOJ How many ways?? 2157【矩阵高速幂】
    [ACM] POJ 3253 Fence Repair (Huffman树思想,优先队列)
    6.非关系型数据库(Nosql)之mongodb:集群(主从复制)
    androidproject有红色叹号的解决方式
  • 原文地址:https://www.cnblogs.com/521-PENG/p/14611043.html
Copyright © 2011-2022 走看看