菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
369
0

2020软件工程作业01

原创
05/13 14:22
阅读数 60030
这个作业属于哪个课程 软工-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。有什么不会的就百度,毕竟现在知识面不广,百度很多新东西,提高性能什么的都挺有帮助的。

发表评论

0/200
369 点赞
0 评论
收藏