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 的字符数\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)的更多相关文章
- 项目-基于视频压缩的实时监控系统--tiny6410
项目-基于视频压缩的实时监控系统--tiny6410 @国嵌linux学习笔记. 1. 构造服务端结构体 server struct server { int epfd; //保存epoll指针 st ...
- DoNet开源项目-基于jQuery EasyUI的后台管理系统
博主在业余时间开发了一个简单的后台管理系统,其中用到了 jQuery EasyUI 框架,上次分享过系统布局,参考文章:jQuery EasyUI 后台管理系统布局分享,目前已完成系统的整体框架的搭建 ...
- DoNet开源项目-基于Amaze UI的点餐系统
帮朋友做的点餐系统,主要是为了让顾客在餐桌上,使用微信扫描二维码,就可以直接点菜,吃完使用微信付款. 系统演示地址,账户名和密码均为:admin.(请不要删除admin用户) GitHub Clone ...
- K2 BPM项目 基于COM组件调用SAP RFC 问题
K2 BPM项目 基于COM组件调用SAP RFC 问题 问题前景: 环境:Win 2008 R2 64bit 最近项目中有支流程需求中需要在会计入账环节回写SAP的会计凭证. SAP组给我们提供.N ...
- vue2.0---vue-router总结(项目基于vue-cli)
vue2.0---vue-router总结(项目基于vue-cli) 1. 在项目中安装: npm install vue-router --save 2. 在项目中的引入: // The Vue b ...
- 不用终端运行 Vue项目 基于Pycharm
不用终端运行 Vue项目 基于Pycharm 如下图展示 接下来 然后单击右上角运行 即可完成运行
- VS web项目 基于IIS调试和模拟域名调试
1.安装IIS 2.注册.net framework 到IIS 打开程序-运行-cmd:输入一下命令重新注册IISC:\WINDOWS\Microsoft.NET\Framework\v4.0.303 ...
- 阿里巴巴开源项目: 基于mysql数据库binlog的增量订阅&消费
背景 早期,阿里巴巴B2B公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求.不过早期的数据库同步业务,主要是基于trigger的方式获取增量变更,不过从2010年开始,阿里系公司开始逐步的尝 ...
- Docker实战部署JavaWeb项目-基于SpringBoot
最近在滴滴云上看到服务器很便宜,1核2G,1年只需要68块钱.下面是我基于Docker部署Javaweb服务的过程.目前我见过的最便宜的服务器,阿里云打折的时候都没有这么便宜啊,果断入手.有需要的话可 ...
随机推荐
- [MIT6.006] 17. Bellman-Ford
如果出现下图所示的负循环,会有相关点的当前最短路径为undefined(即无法定义). 之前我们也看过通用的最短路径算法思路,如下图所示: 这种通用算法会有两个问题: 时间复杂度呈指数性. 如果出现负 ...
- Nacos配置中心源码分析
1.使用 compile 'com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-config:2.2.3.RELEASE' spring: app ...
- HDU100题简要题解(2060~2069)
这十题感觉是100题内相对较为麻烦的,有点搞我心态... HDU2060 Snooker 题目链接 Problem Description background: Philip likes to pl ...
- 推荐一个适用于SpringBoot项目的轻量级HTTP客户端框架,快来试试它!
在SpringBoot项目直接使用okhttp.httpClient或者RestTemplate发起HTTP请求,既繁琐又不方便统一管理.因此,在这里推荐一个适用于SpringBoot项目的轻量级HT ...
- Java学习之Swing Gui编程
Java学习之Swing Gui编程 0x00 前言 前面的使用的Gui是基于Awt 去进行实现,但是在现实写Gui中 AWT实际运用会比较少. 0x01 Swing 概述 AWT 和Swing 区别 ...
- CorelDRAW常用工具之手绘工具
对于平面设计师来说,一个好用顺手的手绘工具是必不可少的,CorelDRAW的手绘工具能将手绘笔触转换成平滑的线条或者形状. 1.基础操作 CorelDRAW的手绘工具组包含手绘.2点线.贝塞尔.钢笔. ...
- Camtasia中对给录制的视频添加视觉效果
视频创作和后期剪辑对很多人来说是一件很头痛的事,对着屏幕一段一段.一帧一帧的进行调整会让人十分的心烦,有时花费了大量时间剪出来的视频质量却不高,让人有一种想砸键盘的冲动. 这种问题,除非是原视频素材质 ...
- ThreadLocal以及强软弱虚引用
1.ThreadLocal ThreadLocal即线程本地,可以实现每个线程存入取出TreadLocal值互不影响.因为TheadLocal底层是用了一个Map结构存放数据,而这个Map是从当前这个 ...
- eslint报错: Unexpected any value in conditional. An explicit comparison or type cast is required
原代码: record.modifiedTime? 修改后代码:typeof record.modifiedTime !== 'undefined' ? (isAddType === true ? ...
- Java基础教程——线程同步
线程同步 synchronized:同步的 例:取钱 不做线程同步的场合,假设骗子和户主同时取钱,可能出现这种情况: [骗子]取款2000:账户余额1000 [户主]取款2000:账户余额1000 结 ...