编程作业

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知识要学,还有很多的数据传输的关系要学.慢慢百度搜索一点点积累

posted on 2021-04-02 13:33  Mi_Yun  阅读(53)  评论(0编辑  收藏  举报