作业二Wordcount
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的更多相关文章
- 结对作业二——WordCount进阶版
软工作业三 要求地址 作业要求地址 结对码云项目地址 结对伙伴:秦玉 博客地址 PSP表格 PSP2.1 个人开发流程 预估耗费时间(分钟) 实际耗费时间(分钟) Planning 计划 10 7 · ...
- Python学习之编写三级菜单(Day1,作业二)
作业二:多级菜单 三级菜单 可依次进入各子菜单 在各级菜单中输入B返回上一级Q退出程序 知识点:字典的操作,while循环,for循环,if判断 思路: 1.开始,打印一级菜单让用户进行选择(可以输入 ...
- day1作业二:多级菜单操作
作业二:多级菜单 (1)三级菜单 (2)可以次选择进入各子菜单 (3)所需新知识点:列表.字典 要求:输入back返回上一层,输入quit退出整个程序 思路: (1)首先定义好三级菜单字典: (2)提 ...
- day1作业二:多级菜单操作(函数实现)
作业二:多级菜单 (1)三级菜单 (2)可以次选择进入各子菜单 (3)所需新知识点:列表.字典 要求:输入back返回上一层,输入quit退出整个程序 本示例的三级菜单是一个yaml文件格式,格式如下 ...
- day1 作业二:多级菜单操作
作业二:多级菜单 (1)三级菜单 (2)可以次选择进入各子菜单 (3)所需新知识点:列表.字典 要求:输入b返回上一层,输入q退出整个程序 思路:三级菜单第一级别是省,第二级别是市,第三级别是县,用户 ...
- day1作业二:多级菜单
作业二:多级菜单 1.三级菜单 2.可以次选择进入各子菜单 3.所需新知识点:列表.字典 4.打印b回到上一层 5.打印q退出循环 流程图如下: readme: (1)存储三级菜单的字典;设置 ...
- 软件测试第二周个人作业:WordCount
github地址:https:/github.com/muzhailong/wc.git 第一次写博客很不容易,也算是一个好的开始吧. 1. 个人作业要求 作业简述:根据WordCount的需求描 ...
- 个人作业2——WordCount
一.码云地址 https://gitee.com/fyxjm/PersonalProject-Java/tree/master 二.个人PSP表格 PSP2.1 个人开发流程 预估耗费时间(分钟) 实 ...
- Logistic回归二分类Winner or Losser----台大李宏毅机器学习作业二(HW2)
一.作业说明 给定训练集spam_train.csv,要求根据每个ID各种属性值来判断该ID对应角色是Winner还是Losser(0.1分类). 训练集介绍: (1)CSV文件,大小为4000行X5 ...
随机推荐
- Ubuntu 16.04.1 LTS配置LNMP使用wordpress搭建博客
今天想用wordpress搭个博客,我的服务器是腾讯云的,然后腾讯云里有官方文档搭建的,但它是用centos为例, 搞得我的ubuntu跟着它走了些歪路,然后结合网上其它资料,终于一点一点的解决了. ...
- C++11のlambd表达式
在其他语言中,我们常见lambda表达式,c++11中也引入了. 利用Lambda表达式,可以方便的定义和创建匿名函数.今天,我们就来简单介绍一下C++中Lambda表达式的简单使用. 一.lambd ...
- JavaScript match()方法和正则表达式match()
先介绍参数为普通字符串的使用方式,此时match方法的返回值是存放首次匹配内容的数组.如果没有找到匹配结果,返回null.语法结构: 1 str.match(searchvalue)参数解析:(1). ...
- 实战 EF(LINQ) 如何以子查询的形式来 Join
如题,大多数网上关于 LINQ Join 的示例都是以 from x in TableA join ... 这样的形式,这种有好处,也有劣势,就是在比如我们使用的框架如果已经封装了很多方法,比如分页 ...
- Unity3D介绍
Unity3D介绍:Unity3D是一个游戏开发引擎 由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏.建筑可视化.实时三维动画等类型互动内容的多平台的综合型游戏开发工具 ...
- [题解]图的m着色问题
图的m着色问题(color) [题目描述] 给定无向连通图G和m种不同的颜色.用这些颜色为图G的各顶点着色,每个顶点着一种颜色.如果有一种着色法使G中每条边的2个顶点着不同颜色,则称这个图是m可着色的 ...
- dpdk-18.11开发库编译安装
简介 dpdk官网 安装 下载 点击下载地址,选择合适的版本下载.这里下载DPDK 18.11.0 (LTS)版本. 编译 将下载的dpdk-18.11.tar.xz上传服务器,解压,这里放在了/op ...
- Django(九)下:Ajax操作、图片验证码、KindEditor使用
三.Ajax操作 ajax操作基于浏览器的xmlHttpRequest对象,IE低版本是另外一个对象,jQuery 1 版本对那两个对象做了封装,兼容性最好,2 .3版本不再支持IE低版本了. Aja ...
- OpenCV4.1.0实践(3) - 图片缩放
简单的案例: (1)通过比例进行缩放 import cv2 as cv import numpy as np # 图片缩放 img = cv.imread('images/animal.jpg', f ...
- 正则化(Regularization)本质
参考: http://www.cnblogs.com/maybe2030/p/9231231.html https://blog.csdn.net/wsj998689aa/article/detail ...