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 的字符数\n" +
"-w file.c 返回文件 file.c 的词的数目 \n" +
"-l file.c 返回文件 file.c 的行数 \n" );
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 + "\n";
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的时候未能做好笔记并抽空回顾,导致对知识点的生疏和遗忘,只能重新学习一些以前学过的知识点。其三,思维定式,禁锢自己在一些老旧的套路中,未能想到一些创新的解决方法。

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

 

WordCounter项目(基于javase)的更多相关文章

  1. 项目-基于视频压缩的实时监控系统--tiny6410

    项目-基于视频压缩的实时监控系统--tiny6410 @国嵌linux学习笔记. 1. 构造服务端结构体 server struct server { int epfd; //保存epoll指针 st ...

  2. DoNet开源项目-基于jQuery EasyUI的后台管理系统

    博主在业余时间开发了一个简单的后台管理系统,其中用到了 jQuery EasyUI 框架,上次分享过系统布局,参考文章:jQuery EasyUI 后台管理系统布局分享,目前已完成系统的整体框架的搭建 ...

  3. DoNet开源项目-基于Amaze UI的点餐系统

    帮朋友做的点餐系统,主要是为了让顾客在餐桌上,使用微信扫描二维码,就可以直接点菜,吃完使用微信付款. 系统演示地址,账户名和密码均为:admin.(请不要删除admin用户) GitHub Clone ...

  4. K2 BPM项目 基于COM组件调用SAP RFC 问题

    K2 BPM项目 基于COM组件调用SAP RFC 问题 问题前景: 环境:Win 2008 R2 64bit 最近项目中有支流程需求中需要在会计入账环节回写SAP的会计凭证. SAP组给我们提供.N ...

  5. vue2.0---vue-router总结(项目基于vue-cli)

    vue2.0---vue-router总结(项目基于vue-cli) 1. 在项目中安装: npm install vue-router --save 2. 在项目中的引入: // The Vue b ...

  6. 不用终端运行 Vue项目 基于Pycharm

    不用终端运行 Vue项目 基于Pycharm 如下图展示 接下来 然后单击右上角运行 即可完成运行

  7. VS web项目 基于IIS调试和模拟域名调试

    1.安装IIS 2.注册.net framework 到IIS 打开程序-运行-cmd:输入一下命令重新注册IISC:\WINDOWS\Microsoft.NET\Framework\v4.0.303 ...

  8. 阿里巴巴开源项目: 基于mysql数据库binlog的增量订阅&消费

    背景 早期,阿里巴巴B2B公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求.不过早期的数据库同步业务,主要是基于trigger的方式获取增量变更,不过从2010年开始,阿里系公司开始逐步的尝 ...

  9. Docker实战部署JavaWeb项目-基于SpringBoot

    最近在滴滴云上看到服务器很便宜,1核2G,1年只需要68块钱.下面是我基于Docker部署Javaweb服务的过程.目前我见过的最便宜的服务器,阿里云打折的时候都没有这么便宜啊,果断入手.有需要的话可 ...

随机推荐

  1. waeshall算法原理和实现

    传递闭包Warshall方法简要介绍 ① 在集合X上的二元关系R的传递闭包是包含R的X上的最小的传递关系.R的传递闭包在数字图像处理的图像和视觉基础.图的连通性描述等方面都是基本概念.一般用B表示定义 ...

  2. 一次webpack小规模优化经历

    这标题一点营销号味道都没有,怎么会有人看啊!(笑) 没人看也无所谓的文章背景: 八月份入职了新公司,是个好几年的老项目了,公司产品是存在很久了,但我接触到的代码版本保守估计应该是有个三年到四年这样的历 ...

  3. 配置cobbler步骤

    首先找到下载包的地址 (使用的是centos6) http://download.opensuse.org/repositories/home:/libertas-ict:/cobbler26/Cen ...

  4. DDD(领域驱动设计)--战略设计

    领域 领域是一个组织所做的事情以及其中所包含的一切.商业机构通常会确定一个市场,然后在这个市场中销售产品和服务.每个组织都有它自己的业务范围和做事方式. 领域就是解决一个特定范围内的业务问题. 如何分 ...

  5. php(tp5)实现分页效果

    public function admin(){ if(request()->isPost()){ //获取第二页的数据传current = 2过来即可 $post['origin'] = in ...

  6. 计算机&编程语言发展史

    计算机&编程语言发展史 编辑于2020-11-18 计算机的基本组成 计算机的发展经历了哪几代? 第一代 电子管计算机 第二代 晶体管计算机 第三代 集成电路计算机 第四代 大规模和超大规模集 ...

  7. 使用pdfFactory隐藏文档中的隐私信息

    分享PDF文档时,文档中可能会存在一些隐私信息,比如用户名.用户的邮件地址.电话号码等信息.为了更好地保护原有文档内容的完整性,大家可以在生成PDF时,使用pdfFactory的隐藏信息功能,删除或遮 ...

  8. Tuxera Disk Manager轻松解决硬盘格式转换问题

    生活中经常会遇到硬盘格式转换的问题,很多小伙伴都不知道怎么进行操作,特别是Mac小白们.今天,小编想要给不熟悉Mac系统的小伙伴推荐一款专业且高效的磁盘管理工具--Tuxera NTFS,可以帮助我们 ...

  9. robot 如何定义用户关键字、变量

    1.用户关键字,使用robot语法定义的关键字 2.系统关键字  自带的 3.资源文件,自己定义的关键字 4.变量 自己定义的关键字,需单独建一个资源文件 自己写的关键字,需写在***Keywords ...

  10. 实战教程:如何将自己的Python包发布到PyPI上

    1. PyPi的用途 Python中我们经常会用到第三方的包,默认情况下,用到的第三方工具包基本都是从Pypi.org里面下载. 我们举个栗子: 如果你希望用Python实现一个金融量化分析工具,目前 ...