wordcount作业
gitee地址:##
https://gitee.com/yzyindex/wordcount
一、需求分析
通过程序设计,编写一个可执行文件exe能够对源程序文件进行统计字符数、单词数、行数,统计结果可以以指定的格式输出到默认文件中。
可执行程序命名为:wc.exe,该程序处理用户需求的模式为:
wc.exe [parameter] [input_file_name]
基本功能:
wc.exe -c file.c 对字符数的统计
wc.exe -w file.c 对单词数的统计
wc.exe -l file.c 对行数的统计
wc.exe -o result.txt 将结果输出到指定文件result.txt
psp2.1 | psp阶段 | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 30 | 20 |
Estimate | 估计这个任务需要多少时间 | 30 | 15 |
Development | 开发 | 200 | 300 |
Analysis | 需求分析 (包括学习新技术) | 20 | 30 |
Design Spec | 生成设计文档 | 5 | 5 |
Design Review | 设计复审 (和同事审核设计文档) | 20 | 20 |
Coding | 代码规范 (为目前的开发制定合适的规范) | 20 | 20 |
Code Review | 具体设计 | 20 | 30 |
Test | 具体编码 | 40 | 50 |
Reporting | 代码复审 | 10 | 20 |
Test Report | 报告 | 30 | 70 |
Size Measurement | 测试报告 | 30 | 10 |
Postmortem & Process | 计算工作量 | 20 | 25 |
Improvement Plan | 事后总结, 并提出过程改进计划 | 20 | 30 |
合计 | 495 | 615 |
二、解题思路
为了用两个数组分别存取文件名和操作命令,根据是否带有-0指令来采取两种不同的方式输出结果到指定文件和默认文件,每种方式采用循环+switch的方式得到输出信息的字符串str
最终将str输入到指定的文件
三、代码说明
将命令和文件名分离
List<String> operations = new ArrayList<String>();
List<String> files = new ArrayList<String>();
String outPutFile ="result.txt";
for(int i=0 ;i<args.length;i++)
{
if(args[i].startsWith("-"))
operations.add(args[i]);
else
files.add(args[i]);
}
不带-o命令的操作 通过for+switch取得输出信息str,最终输入到指定文件。
if(!operations.contains("-o"))
{
for (int j= 0; j < files.size(); j++) {
switch (operations.get(i)) {
case "-c":
str+=" "+basicFunction.getCharNum(files.get(j));
break;
case "-l":
str+=" "+basicFunction.getLineNum(files.get(j));
break;
case "-w":
str+=" "+basicFunction.getWordNum(files.get(j));
break;
default:
System.out.println("false");
break;
}
}
outputfile(str,outPutFile);
}
带有-o的操作
else {
outPutFile=files.get(files.size()-1);
for (int j= 0; j< files.size()-1; j++) {
switch (operations.get(i)) {
case "-c":
str+=" "+basicFunction.getCharNum(files.get(j));
break;
case "-l":
str+=" "+basicFunction.getLineNum(files.get(j));
break;
case "-w":
str+=" "+basicFunction.getWordNum(files.get(j));
break;
case "-o" : break;
default:
System.out.println("false");
break;
}
}
outputfile(str,outPutFile);
}
获取字符数量,单词数量,行数的函数
public static String getCharNum(String string) throws IOException
{
BufferedReader buf =Util.getBufferedReader(string);
String line;
int charNum = 0;
while((line = buf.readLine()) != null){
char[] ch = line.toCharArray();
for(int i=0; i < ch.length; i++) {
if(!Character.isWhitespace(ch[i])) {
charNum++;
}
}
}
System.out.println("字符数: " + charNum);
String str="字符数: " + charNum;
buf.close();
return str;
}
public static String getWordNum(String file) throws IOException
{
int wordNum=0;
int x=-1;
Reader Reader=Util.getFileReader(file);
while((x=Reader.read())!=-1)
{
char a=(char)x;
if(a==' '||a==','||a=='.')
{
wordNum++;
}
}
Reader.close();
String str="单词数:"+wordNum;
System.out.println("单词数:"+wordNum);
return str;
}
public static String getLineNum(String file) throws IOException
{
int lineNum=0;
BufferedReader buf=Util.getBufferedReader(file);
while(buf.readLine()!=null)
{
lineNum++;
}
buf.close();
String str="行数:"+lineNum;
System.out.println("行数:"+lineNum);
return str;
}
工具util类 提供各种的文件操作流
public static BufferedReader getBufferedReader(String file) throws FileNotFoundException {
File file1 = new File(file);
BufferedReader buf=null;
buf = new BufferedReader(new InputStreamReader(new FileInputStream(file1)));
return buf;
}
public static InputStream getInputStream(String file) throws FileNotFoundException {
File file1 = new File(file);
InputStream in=null;
in= new FileInputStream(file1);
return in;
}
public static Reader getFileReader(String file) throws FileNotFoundException
{
File file1 = new File(file);
Reader rd= null;
rd =new FileReader(file1);
return rd;
}
public static BufferedWriter getBufferedWriter(File file) throws FileNotFoundException
{
BufferedWriter buf = null;
buf= new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file)));
return buf;
}
测试输入:
wc.exe -c fix.txt
wc.exe -c -l fix.txt
wc.exe -c -w -l test.txt
wc.exe -l -c test.txt
wc.exe -c -w test.xt
wc.exe -c -w -l test.txt
wc.exe -c --w -c test.txt
wc.exe -l --ww -c test.txt
部分测试截图:
经上述测试 程序都能排除错误,但由于时间原因我并没有编写当用户输入错误提示用户重新输入的代码,导致程序存在一些逻辑问题
心得体会
我自以为学了java的很多知识,但是当用的时候才发现,学了当没学!!!也特别是对i\o的操作,简直是重新学了一遍,本来没有给编码留太多的时间,最后到写时编码花了太多的时间,不过能重新学到新的知识,也算是有收获,不过这也让我下定决心再学一遍代码,边学边敲! 除此之外,这次试验最大的收获便是git了,简直太好用了,我花了一下午+一晚上的时间,掌握了许多命令操作,算是被编码打击后的一些安慰吧。希望老师多出点个人项目,我想多实战一下!!!
有关博客的使用和排版:http://www.cnblogs.com/math/p/se-tools-001.html。
有关Git的使用,廖雪峰的官方网站。