• 2020软件工程作业01


    这个作业属于哪个课程 软工-2018级计算机2班
    这个作业要求在哪里 作业要求
    这个作业的目标 学习使用GITHUB或者码云
    学号 20188450
    参考文献 eclipse中使用GIT或者码云(eclipse最新版自带GIT插件)
    参考文献 正则表达式的使用

    文章主体


    码云项目地址


    PSP表格

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

    解题思路描述

    第一步判断输入参数,第二步判断输入文件和输出文件是否存在,输入文件不存在则结束程序输出提示信息。输出文件不存在则依照参数创建一个新的输出文件。
     调用Lib类的方法实现具体功能:

    1. numberOfCharacters(File inputFile):统计文件的字符数;
       * 只需要统计Ascii码,汉字不需考虑
       * 空格,水平制表符,换行符,均算字符
       通过FileReader的read()的返回值判断是否是ASCII字符,因为英文的字母数字符号用ASCII表示为0-255。

    1. numberOfWord(File inputFile):统计文件的单词总数;
       * 至少以4个英文字母开头,跟上字母数字符号
       * 单词以分隔符分割
       * 不区分大小写
       直接一次性把文件全读进内存。用正则表达式拆分文本得到待选单词。对待选单词进行条件判断:是否至少以4个英文字母开头,满足则转化为小写保存在wordsArray中。对删选出来的单词进行排序、去重。得到无重复单词的数量。
    			String[] words=inputTxt.split(regex);
    			//满足条件(至少以4个英文字母开头,跟上字母数字符号,单词以分隔符分割)的单词集合 
    			ArrayList<String> wordsArray=new ArrayList<String>();
    			for(String temp:words) {
    				if(temp.length()>=4&&temp.matches("^[A-Za-z]{4,}[A-Za-z0-9]{0,}")) {
    					//保存为小写
    					wordsArray.add(temp.toLowerCase());               
    				}
    			}
    

    1. numberOfEffectiveRows(File inputFile):统计文件的有效行数;
       *任何包含非空白字符的行,都需要统计。
       按行读取文本,如果不包含非空字符且字符长度不等于0则认为是有效行。

    1. top10Words(File inputFile):统计文件中各单词的出现次数,最终只输出频率最高的10个;
       * 频率相同的单词,优先输出字典序靠前的单词。
       * 输出的单词统一为小写格式。
       直接一次性把文件全读进内存。用正则表达式拆分文本得到待选单词。对待选单词进行条件判断:是否至少以4个英文字母开头,满足则转化为小写保存在wordsArray中。对排好序的wordsArray进行查重,统计每个单词出现的次数,借助WordOcc类(保存单词字符串和单词出现次数)。对去重的topWords进行降序排序,截取前十个出现次数最高的单词返回。
    //对拍好序的word进行查重,统计每个单词出现的次数
    				ArrayList<WordOcc> topWords=new ArrayList<WordOcc>();
    				String preWord=wordsArray.get(0);
    				WordOcc newWord=new WordOcc(wordsArray.get(0));
    				topWords.add(newWord);
    				for(int i=1;i<wordsArray.size();i++) {
    					if(!preWord.equals(wordsArray.get(i))) {
    						preWord=wordsArray.get(i);
    						newWord=new WordOcc(wordsArray.get(i));
    						topWords.add(newWord);
    					}else {
    						topWords.get(topWords.size()-1).occ++;
    					}
    				}
    

    代码规范制定链接:制定的代码规范——《码出高效_阿里巴巴Java开发手册》


    设计与实现过程


    性能改进

    读取文件一开始想到的是FileReader一个字节一个字节的读,但是其实有一次读取整个文本的输入流:FileInputStream。而且速度很快。


    单元测试

    从网络上随意copy了几篇文章用作测试文件。自己输入测试了可能出现的异常文本。关于作业要求中提出来的这方面的要求我不是很懂。


    异常处理说明

    java自带异常处理,所有我只增加了一些中文提示。


    心路历程与收获

    学习到了如何使用eclipse和码云进行代码同步。还学习到了许多并不怎么了解的java类,比如文件输入流FileInputStream。有什么不会的就百度,毕竟现在知识面不广,百度很多新东西,提高性能什么的都挺有帮助的。

    努力努力
  • 相关阅读:
    iOS开发常见错误(转)
    SVN各种错误提示产生原因及处理方法大全(转)
    SVN常见问题(转)
    iPhone6 Plus、iPhone6、iPhone5S和之前版本真实分辨率
    各类 HTTP 返回状态代码详解(转)
    js:全局作用域和调整浏览器窗口大小
    python之制作模块
    python之模块time | strftime || 模块datetime | timedelta | 计算3天前的日期
    python之模块 sys | os
    python之正则表达式 | match | split | findall | sub替换 |
  • 原文地址:https://www.cnblogs.com/xqldc/p/14593475.html
Copyright © 2020-2023  润新知