这个作业属于哪个课程 | https://edu.cnblogs.com/campus/zswxy/computer-science-class1-2018 |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/zswxy/computer-science-class4-2018/homework/11880 |
这个作业的目标 | 完成项目 |
学号 | 20188537 |
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 50 | 70 |
• Estimate | • 估计这个任务需要多少时间 | 240 | 360 |
Development | 开发 | 100 | 110 |
• Analysis | • 需求分析 (包括学习新技术) | 30 | 30 |
• Design Spec | • 生成设计文档 | 20 | 25 |
• Design Review | • 设计复审 | 10 | 10 |
• Coding Standard | • 代码规范 (为目前的开发制定合适的规范) | 30 | 35 |
• Design | • 具体设计 | 80 | 100 |
• Coding | • 具体编码 | 180 | 200 |
• Code Review | • 代码复审 | 50 | 60 |
• Test | • 测试(自我测试,修改代码,提交修改) | 20 | 20 |
Reporting | 报告 | 50 | 50 |
• Test Repor | • 测试报告 | 20 | 20 |
• Size Measurement | • 计算工作量 | 30 | 30 |
• Postmortem & Process Improvement Plan | • 事后总结, 并提出过程改进计划 | 10 | 10 |
合计 | 920 | 1210 |
项目链接:
https://gitee.com/shihao0701/project-c
解题思路:
1、统计文件的字符数
通过FileReader按字符读取文件,并且过滤非ASCII码字符。
2.统计文件单词总数,这里注意到“空格,非字母数字符号为分隔符”,故只需要遍历一遍文件,将其分割符统一设为空格,然后再调用java的字符串的split函数即可,注意还需要写一个函数判断单词的合法性
3.统计总的字符数,直接调用BufferedReader中的readline()方法,对每一行的字符数进行累加,最后加上行数就是文本中总的字符数。
计算模块接口的设计与实现过程
1.读取文件数据
public static String charactersCount(String filePath)
{
BufferedReader bReader=null;
StringBuilder str=null;
try
{
FileReader reader=new FileReader(filePath);
bReader=new BufferedReader(reader);
str=new StringBuilder();
int flag;
//str.append(bufferedReader.read());
while ((flag=bReader.read())!=-1)
{
str.append((char)flag);
}
} catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}finally
{
try
{
bReader.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
return str.toString();
}
2.字符数统计
//字符数总数统计
public static int charactersNumberCount(String str)
{
//将字符串改为字符
char[] ch = str.toCharArray();
int num = 0;
for(int i = 0; i < ch.length; i++) {
if(ch[i] >= 0 && ch[i] <= 127) {
num++;
}
}
return num;
}
3.按照单词出现频数进行排序
//按单词频率进行排序
public List<Map.Entry<String,Integer>> SortMap()
{
List<Map.Entry<String,Integer>> wordList=new ArrayList<Map.Entry<String, Integer>>(wordsMap.entrySet());
Collections.sort(wordList, new Comparator<Map.Entry<String, Integer>>()
{
//利用匿名内部类实现排序
@Override
public int compare(Map.Entry<String, Integer> map1, Map.Entry<String, Integer> map2)
{
if (map1.getValue().equals(map2.getValue()))
{
return map1.getKey().compareTo(map2.getKey());
}
else
{
return map2.getValue()-map1.getValue();
}
}
});
return wordList;
}
输出结果: