wc.java
1.项目相关要求
•基本功能列表:
-c 统计文件中字符的个数
-w 统计文件中的词数
-l 统计文件中的行数
•拓展功能:
-a 统计文件中代码行数、注释行数、空行
2.PSP2.1
PSP2.1 |
Personal Software Process Stages |
预估耗时(小时) |
实际耗时(小时) |
Planning |
计划 |
1.0 | 1.5 |
· Estimate |
· 估计这个任务需要多少时间 |
0.5 | 1 |
Development |
开发 |
30 | 40 |
· Analysis |
· 需求分析 (包括学习新技术) |
0.5 | 1 |
· Design Spec |
· 生成设计文档 |
0.5 | 0.6 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
0.5 | 0.2 |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
0.5 | 0.5 |
· Design |
· 具体设计 |
1 | 1.5 |
· Coding |
· 具体编码 |
30 | 40 |
· Code Review |
· 代码复审 |
1 | 2 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
0.5 | 1 |
Reporting |
报告 |
0.5 | 0.5 |
· Test Report |
· 测试报告 |
0.5 | 0.5 |
· Size Measurement |
· 计算工作量 |
0.5 | 0.5 |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
0.5 | 1 |
合计 |
39 | 52 |
3.解题思路
首先需要读取文件,然后通过命令 计算出字符、词、行、空行、注释行、代码行。
基础功能部分:读取文件后,将读取的文件转换成数组的形式,然后每生成一个数组,就是一行。其中,数组的长度就是字符数。利用正则表达式,判断词的开头结尾,进行计数。
拓展功能部分:利用正则表达式判断是否是注释行。数组长度为0或1为空行。然后代码行=总行数-空行-注释行
4.流程图
5.代码实现
字符数
public static void charNum()throws Exception
{ //文件导入
Scanner input = new Scanner(System.in);
System.out.println("please input path:");
String path = input.next();
int countChar = 0;
InputStreamReader isr = new InputStreamReader(new FileInputStream(path));
BufferedReader br = new BufferedReader(isr); while(br.read()!=-1)//read()=-1代表数据读取完毕
{
String s = br.readLine(); countChar += s.length();//字符个数就是字符长度
} isr.close();//关闭文件
System.out.println("字符个数 "+countChar); }
词数
public static void wordNum()throws Exception
{Scanner input = new Scanner(System.in);
System.out.println("please input path:");
String path = input.next();
int countword = 0;
InputStreamReader isr = new InputStreamReader(new FileInputStream(path));
BufferedReader br = new BufferedReader(isr);
while(br.read()!=-1)//read()=-1代表数据读取完毕
{
String s = br.readLine();
Pattern p = Pattern.compile("\\b[A-Za-z]+\\b");//创建以字母为开头或结尾的模板
Matcher m = p.matcher(s.toString());
while(m.find())
{
countword++;
} } isr.close();//关闭文件 System.out.println("单词个数 "+countword );
行数
public static void lineNum()throws Exception
{Scanner input = new Scanner(System.in);
System.out.println("please input path:");
String path = input.next();
int countline = 0;
int countcommentline = 0;
InputStreamReader isr = new InputStreamReader(new FileInputStream(path));
BufferedReader br = new BufferedReader(isr);
while(br.read()!=-1)//read()=-1代表数据读取完毕
{
String s = br.readLine();
countline++;//因为是按行读取,所以每次增加一即可计算出行的数目
}
isr.close();//关闭文件
System.out.println("行数 "+countline); }
空行,注释行,代码行
public static void alllineNum()throws Exception
{Scanner input = new Scanner(System.in);
System.out.println("please input path:");
String path = input.next();
int countline = 0;
int countcommentline = 0;
int countblankline = 0;
int codeNum=0;
InputStreamReader isr = new InputStreamReader(new FileInputStream(path));
BufferedReader br = new BufferedReader(isr);
while(br.read()!=-1)//read()=-1代表数据读取完毕
{
String s = br.readLine();
if(s.length()<=1)
{
countblankline++;
}
Pattern p = Pattern.compile("((/)|(/\\*+)|((^\\s)*\\*)|((^\\s)*\\*+/))+");//创建以注释符为开头或结尾的模板 Matcher m = p.matcher(s.toString());
while(m.find())
{
countcommentline++;
}
countline++;//因为是按行读取,所以每次增加一即可计算出行的数目
}
isr.close();//关闭文件
codeNum=countline-countcommentline-countblankline;
System.out.println("行数 "+countline);
System.out.println("注释行 "+countcommentline );
System.out.println("空行数 "+countblankline);
System.out.println("代码行 "+codeNum);
}
main函数
public static void main(String[] args) throws Exception
{ String bString = null;
System.out.println("请输入命令 ");
Scanner ms= new Scanner(System.in);
if (ms.hasNext()) {
bString = ms.next();
}
if (bString.equals("-c"))
{
s.charNum();
}
if (bString.equals("-w"))
{
s.wordNum();
}
if (bString.equals("-l"))
{
s.lineNum();
}
if (bString.equals("-b"))
{
s.blanklineNum(); }
if (bString.equals("-a"))
{
s.alllineNum(); } }
6.测试运行
7. 项目总结
通过这次项目,我发现自己知识体系有所欠缺,通过学习书本,和上网查询,请教同学得以解决。也学习到了许多新的知识。
wc.java的更多相关文章
- 个人项目-WC (java实现)
一.Github地址:https://github.com/734635746/WC 二.PSP表格 PSP2.1 Personal Software Process Stages 预估耗时(分钟) ...
- 个人项目 wc(java实现)
一.Github网址: https://github.com/Clarazhangbw/Wc.exe 二.PSP表 PSP2.1 Personal Software Process Stages 预估 ...
- WC Java 实现
项目 github 地址 一. 实现情况 基本要求 c 统计文件字符数 (实现) w 统计文件词数 (实现) l 统计文件行数(实现) 扩展功能 s 递归处理目录下符合条件得文件(实现) a 返回文件 ...
- 个人项目:Java实现WC
Java实现WC Github项目地址:https://github.com/auxshaw/WC 项目要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个 ...
- (https://www.ibm.com/developerworks/community/forums/html/topic?id=77777777-0000-0000-0000-000014550004)Topic: Caught java.io.CharConversionException. ERRORCODE=-4220, SQLSTATE=null
270002WDPN 3 Posts 0 people l ...
- 本地idea开发mapreduce程序提交到远程hadoop集群执行
https://www.codetd.com/article/664330 https://blog.csdn.net/dream_an/article/details/84342770 通过idea ...
- HUST软测1504班第2周作业成绩:WordCount
说明 本次公布的成绩为第2周个人作业WordCount的结果: 第2周个人作业:WordCount 如果同学对作业结果存在异议,可以: 在毕博平台讨论区的第2周作业第在线答疑区发帖申诉. 或直接在博客 ...
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
- 小白のjava实现wc.exe功能
GitHub地址 项目完成情况 基本功能列表(已实现) wc.exe -c file.c //返回文件 file.c 的字符数 wc.exe -w file.c //返回文件 file. ...
随机推荐
- 使用js获取伪元素的content
在测试过程中有时候会遇到反爬虫机制,一些元素会使用伪元素,这样在定位元素的时候会定位不到,这时候就要使用js来帮助定位,获取到想要的元素 下面是部分代码 //使用js获取伪元素的content Str ...
- Web标准:四、纵向导航菜单及二级弹出菜单
Web标准:四.纵向导航菜单及二级弹出菜单 知识点: 1.纵向列表 2.标签的默认样式 3.css派生选择器 4.css选择器的分组 5.纵向二级列表 6.相对定位和绝对定位 1)纵向列表 可以看 ...
- Ubuntu中解决机箱前置耳机没声音
Ubuntu中解决机箱前置耳机没声音 安装pavucontrol软件: sudo apt-get install pavucontrol 然后直接运行pavucontrol打开软件: 将输出设备设置为 ...
- ES5之defineProperty
一 概述 Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象. 对象里目前存在的属性描述符有两种主要形式:数据描述符和存 ...
- 4sum, 4sum closest
4sum [抄题]: [思维问题]: 以为很复杂,其实是“排序+双指针”的最高阶模板 [一句话思路]: [输入量特别大怎么办]: [画图]: [一刷]: 先排序! if (i > 0 & ...
- 《Google软件测试之道》摘录
以下是最近看的一本书<Google软件测试之道>里的一些摘录,收获很多. 1.讨论测试开发比并没有什么意义,如果你是一名开发人员,同时也是一名测试人员,如果你的职位头衔上有测试的字样,你的 ...
- 源代码安装grub-customizer
wget https://launchpad.net/grub-customizer/5.0/5.0.6/+download/grub-customizer_5.0.6.tar.gztar zxvf ...
- js-移动端android浏览器中input框被软键盘遮住的问题解决方案
我遇到的问题:在一个页面里有一个弹出层之前我给我的最外层加了固定定位 用了下面的方法也不好使:没有办法我将之改为绝对定位层级变高在加上一个顶部标签通过js计算顶部高度来实现满屏遮挡: <sect ...
- redhat配置java环境
1.检查是否有旧版本的jdk java -version java version "1.4.2" gij (GNU libgcj) version (Red Hat -) Cop ...
- java文件读写操作指定编码格式
读文件: BufferedReader 从字符输入流中读取文本,缓冲各个字符,从而提供字符.数组和行的高效读取. 可以指定缓冲区的大小,或者可使用默认的大小.大多数情况下,默认值就足够大了. 通常,R ...