作业二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/
最新文章
- mysql主从
- android解析图片资源缩小放大问题
- sitemesh学习笔记(1)
- 【转】itunes connect 如何修改主要语言
- Linux中如何使用gThumb批量调整图片大小
- linux下安装jira详细步骤
- 使用VisualStudio进行单元测试之二
- 3.1,pandas【基本功能】
- 使用 Gitbook 打造你的电子书
- Python入门 - 生成随机数
- vs2008中xlslib与libxls库的编译及使用
- python与 Ajax跨域请求
- day14 闭包
- Java知多少(51)finally
- Unity3d Transform.forward和Vector3.forward的区别!
- 数链剖分(Tree)
- Delphi XE5 android 获取网络状态《转》
- [LeetCode&;Python] Problem 897. Increasing Order Search Tree
- PHP 运行相关概念
- 公司培训lesson 1-代码质量