Gitee
链接:https://gitee.com/mmmmx/WordCount/tree/master
psp2.1 | psp阶段 | 估计耗时(分钟) |
实际耗时(分钟) |
Planning | 计划 | 40 | 20 |
· Estimate | · 估计这个任务需要多少时间 | 40 | 20 |
Development | 开发 | 490 | 450 |
· Analysis | · 需求分析 (包括学习新技术) | 30 | 30 |
· Design Spec | · 生成设计文档 | 60 | 50 |
· Design Review | · 设计复审 (和同事审核设计文档) | 60 | 90 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 10 | 5 |
· Design | · 具体设计 | 50 | 55 |
· Coding | · 具体编码 | 130 | 100 |
· Code Review | · 代码复审 | 60 | 60 |
· Test | · 测试(自我测试,修改代码,提交修改) | 90 | 60 |
Reporting | 报告 | 60 | 70 |
· Test Report | · 测试报告 | 40 | 40 |
· Size Measurement | · 计算工作量 | 10 | 5 |
· Postmortem & ProcessImprovement Plan |
· 事后总结, 并提出过程改进计划 | 10 | 25 |
合计 | 590 | 540 |
解题思路
WordCount功能为统计文件中信息,主要涉及的知识为文件IO流和对字符串的处理。我选择熟悉的java来完成此项目。
一开始看程序预期运行效果和过程,对命令模式启动程序一无所知,百度后发现args中即存储的命令行。
程序测试的时候问题又来了,所需要的args参数该如何加入?百度后又得知在运行配置和调试配置中可以设置,在此,解决了绝大多数问题。
程序实现及代码说明
WordCount功能为统计文件中信息,则按照功能需求依次先完成各种数据的统计,以下是具体功能实现代码
所有对文件的统计方法写在此工具类中
涉及到的知识:对文件IO流的操作,对字符串的操作
以下是此类总览,详细见后面,具体完整代码点最上面码云链接
import java.io.File;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
public class WordCount
{
public static String inputFile;
public static String outputFile;
public static int char1;
public static int word1;
public static int line1;
public static boolean need1;
public static boolean need2;
public static boolean need3;
public static boolean need4;
主函数及其类中方法如下:
public static void main(String[] args)
{
inputFile="";
for(int i=0;i<args.length;i++)
{
if ("-c".equals(args[i]))
{
need1 = true;
}
else if ("-w".equals(args[i]))
{
need2 = true;
}
else if ("-l".equals(args[i]))
{
need3 = true;
}
else if ("-o".equals(args[i]))
{
need4 = true;
outputFile = args[i + 1];
}
else
{
if (!args[i - 1].equals("-e") && !args[i - 1].equals("-o"))
{
inputFile = args[i];
}
}
}
String outputStr="";
ArrayList<String> fileNames =new ArrayList<String>();
fileNames.add(inputFile);
int len=fileNames.size();
String fn;
for(int i=0;i<len;i++)
{
fn=fileNames.get(i);
String fileShortName=fn.substring(fn.lastIndexOf("\\")+1, fn.length());
if(need1||need2||need3)
{
getBasicInfo(fn);
if(need1)
{
outputStr+=fileShortName;
outputStr+=", char: ";
outputStr+=char1;
outputStr+="\r\n";
}
if(need2)
{
outputStr+=fileShortName;
outputStr+=", word: ";
outputStr+=word1;
outputStr+="\r\n";
}
if(need3)
{
outputStr+=fileShortName;
outputStr+=", line: ";
outputStr+=line1;
outputStr+="\r\n";
}
}
}
if(!need4)
{
outputFile="result.txt";
}
try
{
File writename = new File(outputFile);
writename.createNewFile();
BufferedWriter out = new BufferedWriter(new FileWriter(writename));
out.write(outputStr);
out.flush();
out.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
下面是其他方法的关键代码:
public static void getBasicInfo(String fileName)
{
char1=0;
word1=0;
line1=0;
char charNow;
try
{
File filename = new File(fileName);
InputStreamReader reader = new InputStreamReader(
new FileInputStream(filename));
BufferedReader br = new BufferedReader(reader);
String line ;
line = br.readLine();
while (line != null)
{
char1+=line.length();
line1++;
boolean partition = true;
for(int i=0;i<line.length();i++)
{
charNow=line.charAt(i);
if(partition==true&&charNow!=' '&&charNow!='\t'&&charNow!=','&&charNow!=',')
{
word1++;
}
if(charNow==' '||charNow=='\t'||charNow==','||charNow==',')
{
partition=true;
}
}
line = br.readLine();
}
char1+=line1-1;
br.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
具体设计的测试用例如下:
测试用例
测试结果
测试评价
基本功能大体已经实现,测试结果和预想中的一样,效果还不错,比较令人满意
参考文献连接:
https://www.cnblogs.com/YuQiao0303/p/8607697.html