part1:WordCount编程
Github项目地址
PSP表格
解题思路描述
代码规范制定链接
设计与实现过程
性能改进
单元测试
异常处理说明
心路历程与收获
这个作业属于哪个课程 | <班级链接> |
---|---|
这个作业要求在哪里 | <作业要求的链接> |
这个作业的目标 | 学会使用Java导入文件读取文件并使用函数完成各种功能 |
学号 | 20188410 |
Github项目地址:
https://github.com/94-clown/Project-Java
PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | ||
• Estimate | • 估计这个任务需要多少时间 | 1200 | |
Development | 开发 | ||
• Analysis | • 需求分析 (包括学习新技术) | 45 | |
• Design Spec | • 生成设计文档 | 45 | |
• Design Review | • 设计复审 | 30 | |
• Coding Standard | • 代码规范 (为目前的开发制定合适的规范) | 15 | |
• Design | • 具体设计 | 120 | |
• Coding | • 具体编码 | 240 | |
• Code Review | • 代码复审 | 60 | |
• Test | • 测试(自我测试,修改代码,提交修改) | 45 | |
Reporting | 报告 | ||
• Test Repor | • 测试报告 | 45 | |
• Size Measurement | • 计算工作量 | 30 | |
• Postmortem & Process Improvement Plan | • 事后总结, 并提出过程改进计划 | 30 | |
合计 |
解题思路描述
统计字符数:遍历
空格的话就直接计算字符长度
统计单词总数:
利用空格来判断一个单词的结束,然后将所有的单词转换成大写或者小写再去统计,这里就用字母的ASCII表
计算有效行数:
使用正则表达式"\s*"来判断是否为空行,维护一个统计空行变量lines,有效行数=文件行数-空行行数
单词的出现次数:
使用HashMap统计词频,全文处理结束后进行按要求排序,并输出Top10
代码规范制定链接:
设计与实现过程:
import java.io.*;
import java.util.Scanner;
import java.util.Vector;
public class test1 {
public static void main(String[] args) throws IOException {
// 获得文件整体数据
Scanner in = new Scanner(new File("input.txt"));
String vFileData = ""; // vFileData: 文件串;
while (in.hasNextLine()) {
String str = in.nextLine();
vFileData += str + '\n';
}
vFileData = vFileData.substring(0, vFileData.length() - 1);
// 去除非ASCII字符 以及将所有英文字符小写化
String editData = "";
for (int i = 0; i < vFileData.length(); i++) {
if (vFileData.charAt(i) >= 0 && vFileData.charAt(i) <= 127) {
editData += vFileData.charAt(i);
}
}
editData = editData.toLowerCase();
// System.out.println(editData);
// ===
Vector<String> Words = new Vector<String>();
Vector<Integer> WordValue = new Vector<Integer>();
String WordsString = "";
int WordValueInt = 0;
StringBuilder vsTemp = new StringBuilder();
for (int i = 0; i < editData.length(); i++) {
if (editData.charAt(i) >= 'a' && editData.charAt(i) <= 'z')
vsTemp.append(editData.charAt(i));
else {
if (editData.charAt(i) >= '0' && editData.charAt(i) <= '9')
vsTemp.append(editData.charAt(i));
else {
if (vsTemp.length() >= 4 && IsWord(vsTemp.toString())) {
int flag = 0;
for (int j = 0; j < Words.size(); j++) {
if (vsTemp.toString().equals(Words.elementAt(j))) {
WordValue.setElementAt(WordValue.elementAt(j) + 1, j);
// System.out.println(WordValue.elementAt(j));
// WordValue.set(WordValue.elementAt(j)+1);
flag = 1;
break;
}
}
if (flag == 0) {
Words.addElement(vsTemp.toString());
WordValue.addElement(1);
}
flag = 0;
}
vsTemp = new StringBuilder();
}
}
}
// ===
// 1. 统计字符数
System.out.println("characters: " + editData.length());
// 3. 有效行数
String[] aa = editData.split("\n");
int RowsValue = 0;
for (String s : aa) {
if (!s.equals(""))
RowsValue++;
// System.out.println(aa[i]);
}
System.out.println("lines: " + RowsValue);
// 打印
for (int i = 0; i < Words.size(); i++) {
System.out.println(Words.elementAt(i) + " " + WordValue.elementAt(i));
}
}
public static Boolean IsWord(String vTestWord) {
for (int i = 0; i < 4; i++) {
if (vTestWord.charAt(i) >= '0' && vTestWord.charAt(i) <= '9')
return false;
}
return true;
}
}
心路历程:
看了福州大学的代码,自己啥也不会,硬在何铭康的教导下写出来这么点简单功能的代码.觉得自己还有巨多的Java知识要学,还有很多的数据传输的关系要学.慢慢百度搜索一点点积累