作业二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 ...
随机推荐
- Docker:pipeline编写基本技巧- jenkins配置通过免交互方式拉取git源码管理仓库的代码
工作中,从git仓库拉取代码有2种方式:交互式和非交互式 什么是交互式?就是拉取需要权限才能访问的代码时,需要输入密码 免交互式呢? 是通过密钥,私钥的方式,让服务端信任客户端,产生信任后,任何一次客 ...
- zabbix proxy
ProxyMode=0 Server=zabbix-server的IPHostname=zabbix proxy(跟在zabbixWED网页建立代理proxies名称一样) LogFile=/data ...
- 四。Hibernate 使用MAVEN工具
maven工具的使用1.作用:打包项目以及jar包的版本管理2.使用步骤: a.下载maven工具,修改conf目录下的setting.xml文件 <mirror> <id>a ...
- easyUI的常见属性
datagrid (数据表格) $("#tg").datagrid({url:"TaskList",//请求的地址fit: false, //当true时设置他 ...
- jeecg入门操作—一对多表单开发
一.创建主表 创建订单主表(torder_main) 二.创建附表客户信息表(torder_customer) 设置附表页面外键不可见 设置附表外键 三.创建附表机票 信息表(torder_tic ...
- .a 文件 和 so 文件
所谓静态链接是指把要调用的函数或者过程链接到可执行文件中,成为可执行文件的一部分.当多个程序都调用相同函数时,内存中就会存在这个函数的多个拷贝,这样就浪费了宝贵的内存资源..so文件是共 ...
- 菜鸟学IT之四则运算升级版
菜鸟学IT之四则运算升级版 本次作业要求来自:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2213 团队代码github远程仓库的 ...
- 普通PC通过USB转485串口 ModBus-RTU通信协议控制伺服电机
一.RS485通信 RS485 是半双工通信(2 线制),可以一点对多点进行组网,而且 RS485 是用缆线两端的电压差值来表示传递信号,这与 RS232 电气特性大不一样.RS485 仅仅规定了接收 ...
- 微信网页分享 jssdk config:invalid signature 签名错误
invalid signature签名错误.建议按如下顺序检查: 确认签名算法正确,可用 http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisi ...
- vue 修改数据界面没有及时更新nextTick
使用场景:有些时候,我们使用vue修改了一些数据,但是页面上的DOM还没有更新,这个时候我们就需要使用到nextTick. vm.$nextTick( [callback] ) 说明: 将回调延迟到下 ...