GitHub代码链接

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的更多相关文章

  1. 个人项目-WC (java实现)

    一.Github地址:https://github.com/734635746/WC 二.PSP表格 PSP2.1 Personal Software Process Stages 预估耗时(分钟) ...

  2. 个人项目 wc(java实现)

    一.Github网址: https://github.com/Clarazhangbw/Wc.exe 二.PSP表 PSP2.1 Personal Software Process Stages 预估 ...

  3. WC Java 实现

    项目 github 地址 一. 实现情况 基本要求 c 统计文件字符数 (实现) w 统计文件词数 (实现) l 统计文件行数(实现) 扩展功能 s 递归处理目录下符合条件得文件(实现) a 返回文件 ...

  4. 个人项目:Java实现WC

    Java实现WC Github项目地址:https://github.com/auxshaw/WC 项目要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个 ...

  5. (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 ...

  6. 本地idea开发mapreduce程序提交到远程hadoop集群执行

    https://www.codetd.com/article/664330 https://blog.csdn.net/dream_an/article/details/84342770 通过idea ...

  7. HUST软测1504班第2周作业成绩:WordCount

    说明 本次公布的成绩为第2周个人作业WordCount的结果: 第2周个人作业:WordCount 如果同学对作业结果存在异议,可以: 在毕博平台讨论区的第2周作业第在线答疑区发帖申诉. 或直接在博客 ...

  8. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  9. 小白のjava实现wc.exe功能

    GitHub地址 项目完成情况 基本功能列表(已实现) wc.exe -c file.c     //返回文件 file.c 的字符数 wc.exe -w file.c    //返回文件 file. ...

随机推荐

  1. Ansible 管理MySQL主从复制

    mysql_replication - 管理MySQL复制 1.3版新功能 概要 要求(在执行模块的主机上) 选项 例子 笔记 状态 支持 概要 管理MySQL服务器复制,从属,主状态获取和更改主控主 ...

  2. RN中关于ListView的使用

    1. ListView dataSource 介绍: ListView需要指定数据的来源.传入数据必须是数组,或者是字典里面嵌套数组 系统会根据你传入的数据自动生成section和row 每一个字典的 ...

  3. 奇偶数判断1(if,else if语句)

    public class 奇偶数判断 { public static void main(String [] args){ float s = 9f; //取单浮点型变量s,可为任意值 float h ...

  4. Intersection of Two Linked Lists(LIST-2 POINTER)

    Write a program to find the node at which the intersection of two singly linked lists begins. For ex ...

  5. 18-从n个数中选m个

    #include <iostream>using namespace std; int f(int n, int m){        if(n < m)         //这个条 ...

  6. 如何用Mockplus快速做一个手风琴菜单?

    手风琴菜单是一种比较常用的菜单形式,利用原型工具来做这种菜单通常要用到中继器.即使是功能强大的Axure,想实现该效果也比较麻烦.但如果你对Mockplus有所了解,你一定知道,利用Mockplus的 ...

  7. mvc的表单发送ajax请求,太强大了!!!!

  8. java读取配置文件的方法

    1. Preferences类 这个主要是设置个人喜好.它的数据一般存在系统目录或是用户目录.还可以操作注册表. 2. Properties类 保存键值对.可以指定路径. 3. commons con ...

  9. Json和XML解析

    NSXMLParse 关于XML,有两种解析方式,分别是SAX(Simple API for XML,基于事件驱动的解析方式,逐行解析数据,采用协议回调机制)和DOM(Document Object ...

  10. oracle 用一个表的一个字段更新另一个表的一个字段

    案列: 想更新A表的name字段,由于失误,在写这个表的时候,这个字段没有写,发现的时候,已经写了一个多月的数据了.改了之后的过程,会正常的写这个字段, 可是已经写了的数据也不能铲了,重新计算. 好在 ...