• WordCounter项目(基于javase)


    1.  Github项目地址: https://github.com/Flyingwater101/WordCount

    1.  PSP表格

    PSP2.1

    Personal Software Process Stages

    预估耗时(分钟)

    实际耗时(分钟)

    Planning

    计划

     20

     20

    · Estimate

    · 估计这个任务需要多少时间

     24*60

     40*60

    Development

    开发

     10*60

     20*60

    · Analysis

    · 需求分析 (包括学习新技术)

     3*60

     10*60

    · Design Spec

    · 生成设计文档

     30

     30

    · Design Review

    · 设计复审 (和同事审核设计文档)

     30

     30

    · Coding Standard

    · 代码规范 (为目前的开发制定合适的规范)

     10

    10 

    · Design

    · 具体设计

     20

     30

    · Coding

    · 具体编码

     10*60

     22*60

    · Code Review

    · 代码复审

     60

     60

    · Test

    · 测试(自我测试,修改代码,提交修改)

     40

     60

    Reporting

    报告

     40

     40

    · Test Report

    · 测试报告

     20

     20

    · Size Measurement

    · 计算工作量

     20

     20

    · Postmortem & Process Improvement Plan

    · 事后总结, 并提出过程改进计划

     30

     45

    合计

      24*60

     45*60

    3.  解题思路

      这个项目主要是两个方面,一是java io,二是解析输入的字符串(正则表达式或String方法)。于是我便去加强学习这两个方面的知识,主要是看博客和看java教学视频。

     

    4.  设计实现过程

       共有两个类分别为Main.java和CountSercie.java。

       1.CountSercie.java为计算服务类,共有三个方法,分别用于计算文件的行数、字符数、词的数目。(博主只完成了基础的三个需求,未完成拓展需求和进阶需求)

       2.Main.java为程序的入口,在此调用计算文件信息的方法。

       

    5.  代码说明

    Main.java

    public
    static void main(String[] args) throws Exception { System.out.println( "-c file.c 返回文件 file.c 的字符数 " + "-w file.c 返回文件 file.c 的词的数目 " + "-l file.c 返回文件 file.c 的行数 " ); Scanner input = new Scanner(System.in); while (true) { System.out.println("please input '[order] [filename]':"); String order[] = input.nextLine().split(" "); CountService countService = new CountService(); if (order.length==2) { File file = new File(order[1]); if(!file.exists()){ System.out.println("文件不存在,请重新输入"); } else if(file.isDirectory()){ //输入的为目录时候 System.out.println("请输入正确文件地址"); } else { if (order[0].equals("-c")) { System.out.println("文本的字符数为" + countService.countChar(file)); } else if (order[0].equals("-w")) { System.out.println("文本的字符数为" + countService.countWord(file)); } else if (order[0].equals("-l")) { System.out.println("文本的行数为" + countService.countLine(file)); }else { System.out.println("输入有误,请重新输入"); } } }else System.out.println("输入有误,请重新输入"); } }

    CountService.java

    public long countChar(File file) { if (!file.exists()) { return -1L; } return file.length(); } public long countWord(File file) throws Exception { if (!file.exists()) { return -1L; } long count = 0L; FileReader fileReader = new FileReader(file);// 读文件 BufferedReader bufferedReader = new BufferedReader(fileReader); String value = bufferedReader.readLine(); while (value != null) { value = value.trim();// 去除前后的空格 // msg += value + " "; String r = value.replaceAll("\.", ""); r = r.replaceAll("[^\w]", " ");// 特殊符号都去除,变为空格,方便统计单词数 r = r.replaceAll("\s+", " ").replaceAll(""", " "); r = r.trim();// 去除头尾的空格 String s[] = r.split(" ");// 按空格拆分得到单词 if (!s[0].equals("")) {// 空行不计算单词数 count += s.length; // 累加单词数 } value = bufferedReader.readLine();// 读取下一行,重新进行循环 } bufferedReader.close(); fileReader.close(); return count; } public long countLine(File file) throws Exception { if (!file.exists()) { return -1L; } long count = 0L; FileReader fileReader = null; BufferedReader bufferedReader = null; fileReader = new FileReader(file); bufferedReader = new BufferedReader(fileReader); while (bufferedReader.readLine() != null) { count++; } fileReader.close(); bufferedReader.close(); return count; }

    6.  测试运行

    6.1 空文件           测试结果    

    6.2 只有一个字符测试结果 

     

     

     

    6.3只有一个词测试结果

    6.4只有一行测试结果

    6.5正常的源代码 测试结果 

    7.  项目小结

      这次项目让我感受颇多。这次我对自己十分不满意,很懊悔。其一,在收到任务起未能及时地开始做,一直拖延到ddl。这对于一名程序员来说是一个十分严重是缺点,我需要全力改正。其二,之前学习java的时候未能做好笔记并抽空回顾,导致对知识点的生疏和遗忘,只能重新学习一些以前学过的知识点。其三,思维定式,禁锢自己在一些老旧的套路中,未能想到一些创新的解决方法。

      成为一名程序员,道阻且长。希望自己铭记今日的感受,及时改正错误,更进一步!

     

     

     

     

  • 相关阅读:
    Mbps、Kbps、bps、kb、mb区别和换算
    Python导入模块方法
    C# WinForm 程序免安装 .NET Framework(XP/win7/win10环境运行)
    生成缩略图
    WCF 的优势和特点
    不要在using语句中调用WCF服务
    pb getchild获取DropDownDW子窗体后进行取值
    Bootstrap后台管理模板调研
    PB调用C#编写的DLL
    PowerBuilder与嵌入浏览器交互
  • 原文地址:https://www.cnblogs.com/iamwatershui/p/12501570.html
Copyright © 2020-2023  润新知