1,github地址

https://github.com/dtneverdie/word-count

2,PSP表格

3,解题思路

先从理论上判断应该先将文件内的字符全部读入,然后根据分隔符来进行单词和换行判断。实际操作的时候遇到了很多问题,根据网上查找到的思路编写后又出现exe4j转换以后原本在eclipse上可以正确运行的文件在命令行运行exe就失败了的情况,最终只能参考了同学的实际代码。

4,程序实现过程

共有三个JAVA类,分别为COUNTER类(实现具体功能:字符,单词,行数,空行,代码行,注释行的统计,结果的输出等),READFILE类(实现文件递归读取)和TEST类(主程序入口并在有-s参数时多次调用COUNTER类)

流程图如下

5,代码说明

注:主程序代码部分参考的是李凌风同学的代码

递归得到文件的路径:public static void test(String fileDir) {

List<File> fileList = new ArrayList<File>();

File file = new File(fileDir); 
File[] files = file.listFiles();// 获取目录下的所有文件或文件夹 
if (files == null) {// 如果目录为空,直接退出 
return ; 

// 遍历,目录下的所有文件 
for (File f : files) { 
if (f.isFile()) { 
fileList.add(f);

} else if (f.isDirectory()) { 
//System.out.println(f.getAbsolutePath()); 
test(f.getAbsolutePath()); 

}

for (File f1 : fileList) { 
list.add(f1);
//System.out.println(f1.getName()); 
}

具体统计功能实现:

public void analyse()throws IOException{ //功能实现
String s=null;
InputStreamReader isr = new InputStreamReader(new FileInputStream(path));
BufferedReader br = new BufferedReader(isr);
while((s=br.readLine())!=null)//null表示文件读取结束
{
String ss="";//记录单词
if(!s.equals("")){
countline++;//行增加
//System.out.println(s);
}
countchar += s.length();//字符个数就是字符长度
for(int i=0;i<s.length();i++)//判断一行里字符种类
{
char c=s.charAt(i);
if(!isSeperator(c))//不是分隔符
{
String temp=Character.toString(c);
ss=ss.concat(temp);//拼接字符
if(i==s.length()-1)//行末尾没有分隔符
{
if(!stoplistpath.equals(""))//判断停用词表
{
boolean flag=false;
for(int p=0;p<stoplist.length;p++)
{
if(ss.equals(stoplist[p]))
{
flag=true;
break;
}
}
if(flag==false)
{
word.add(ss); //添加单词
}
}
else 
{
word.add(ss); //添加单词
//System.out.print("2"+ss); 
}
}
}else
{ //注释行判断
if(c=='/')
{
if(i<s.length()-1&&s.charAt(i+1)=='/')
{
if(!expline.contains(countline))
{
expline.add(countline); //添加注释所在行
}
}
}
if(!ss.equals(""))
{
if(!isDigit(ss))
{
//System.out.println("ss:"+ss);
if(!stoplistpath.equals(""))
{
boolean flag=false;
for(int p=0;p<stoplist.length;p++)
{
if(ss.equals(stoplist[p]))
{
flag=true;
break;
}
}
if(flag==false)
{
word.add(ss);
}
}
else 
{
word.add(ss); 
//System.out.print("2"+ss); 
}
if(!linenum.contains(countline))
{
linenum.add(countline);//添加代码所在行
}
countword++;
}
ss="";
}
}
}
}
isr.close();//关闭文件
writer();//输出结果
}
}

6,测试设计过程

7.参考文献

http://tool.oschina.net/apidocs/apidoc?api=jdk-zh

https://www.csdn.net/

作业二Wordcount的更多相关文章

  1. 结对作业二——WordCount进阶版

    软工作业三 要求地址 作业要求地址 结对码云项目地址 结对伙伴:秦玉 博客地址 PSP表格 PSP2.1 个人开发流程 预估耗费时间(分钟) 实际耗费时间(分钟) Planning 计划 10 7 · ...

  2. Python学习之编写三级菜单(Day1,作业二)

    作业二:多级菜单 三级菜单 可依次进入各子菜单 在各级菜单中输入B返回上一级Q退出程序 知识点:字典的操作,while循环,for循环,if判断 思路: 1.开始,打印一级菜单让用户进行选择(可以输入 ...

  3. day1作业二:多级菜单操作

    作业二:多级菜单 (1)三级菜单 (2)可以次选择进入各子菜单 (3)所需新知识点:列表.字典 要求:输入back返回上一层,输入quit退出整个程序 思路: (1)首先定义好三级菜单字典: (2)提 ...

  4. day1作业二:多级菜单操作(函数实现)

    作业二:多级菜单 (1)三级菜单 (2)可以次选择进入各子菜单 (3)所需新知识点:列表.字典 要求:输入back返回上一层,输入quit退出整个程序 本示例的三级菜单是一个yaml文件格式,格式如下 ...

  5. day1 作业二:多级菜单操作

    作业二:多级菜单 (1)三级菜单 (2)可以次选择进入各子菜单 (3)所需新知识点:列表.字典 要求:输入b返回上一层,输入q退出整个程序 思路:三级菜单第一级别是省,第二级别是市,第三级别是县,用户 ...

  6. day1作业二:多级菜单

        作业二:多级菜单 1.三级菜单 2.可以次选择进入各子菜单 3.所需新知识点:列表.字典 4.打印b回到上一层 5.打印q退出循环 流程图如下: readme: (1)存储三级菜单的字典;设置 ...

  7. 软件测试第二周个人作业:WordCount

    github地址:https:/github.com/muzhailong/wc.git 第一次写博客很不容易,也算是一个好的开始吧. 1.   个人作业要求 作业简述:根据WordCount的需求描 ...

  8. 个人作业2——WordCount

    一.码云地址 https://gitee.com/fyxjm/PersonalProject-Java/tree/master 二.个人PSP表格 PSP2.1 个人开发流程 预估耗费时间(分钟) 实 ...

  9. Logistic回归二分类Winner or Losser----台大李宏毅机器学习作业二(HW2)

    一.作业说明 给定训练集spam_train.csv,要求根据每个ID各种属性值来判断该ID对应角色是Winner还是Losser(0.1分类). 训练集介绍: (1)CSV文件,大小为4000行X5 ...

随机推荐

  1. windows下编译Grafana前端

    本次介绍一下Windows环境源码编译步骤. 准备 安装Go 1.8.1 安装NodeJS LTS 安装Git 安装golang开发环境:  参考链接:https://www.cnblogs.com/ ...

  2. P1090 合并果子 题解

    那么,我们开始吧, 堆 堆是一个完全二叉树,而且是每层都有规律的二叉树 规律大概是: 小根堆:最上层数的大小最小,往下每层结点都比父亲结点大,比两个儿子结点小 大根堆:最上层数的大小最大,往下每层结点 ...

  3. ReSharper2018破解详细方法

    下载地址: 主程序官网下载链接:https://download.jetbrains.com/resharper/ReSharperUltimate.2018.3.3/JetBrains.ReShar ...

  4. Python学习案例之Web版语音合成播报

    前言 语音合成技术能将用户输入的文字,转换成流畅自然的语音输出,并且可以支持语速.音调.音量设置,打破传统文字式人机交互的方式,让人机沟通更自然. 应用场景 将游戏场景中的公告.任务或派单信息通过语音 ...

  5. 云计算openstack介绍

    一.云计算的前世今生 所有的新事物都不是突然冒出来的,都有前世和今生.云计算也是IT技术不断发展的产物. 要理解云计算,需要对IT系统架构的发展过程有所认识. 请看下 IT系统架构的发展到目前为止大致 ...

  6. C#导出Excel表格方法

    using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; using NPOI.SS.Formula.Functions; using System.Re ...

  7. Python进阶11---异常及模块化

    异常处理 异常Exception 产生异常

  8. centos7之zabbix邮件报警(短信报警)

    前言 前面我们介绍了zabbix的基本linux和window及SNMP流量的简单监控,我们知道作为运维人员,需要7x24小时待命,但是我们不可能时时刻刻都坐在电脑旁边查看监控上的各个主机状态,所以我 ...

  9. Base 64 & decodeURIComponent

    Base 64 & decodeURIComponent js btoa() & atob() let obj = [{"key":"q",&q ...

  10. 利用layui前端框架实现对不同文件夹的多文件上传

    利用layui前端框架实现对不同文件夹的多文件上传 问题场景: 普通的input标签实现多文件上传时,只能对同一个文件夹下的多个文件进行上传,如果要同时上传两个或多个文件夹下的文件,是无法实现的.这篇 ...