Implementation of WC in JAVA
2021-07-01 20:05
标签:记录 演示 改进 tmp lse 图片 ber 地址 stand github地址 基本功能 扩展功能 高级功能 1.支持图形化界面 (实现) MainWork: 通过输入的参数来调用模块WordCounter中的方法实现基本要求和扩展要求,以及调用实现高级要求中的图形化界面 controller: 基本功能与扩展功能模块包 Word Counter:实现-c 统计文件字符数方法,实现-w 统计文件单词数方法,实现-l 统计文件行数,以及实现 -a中统计文件注释行,代码行,空行和-s的递归处理目录下文件的命令参数。 FileFinder:实现支持处理文件名通配符 UI(图形界面):NewJFrame 是为了实现处理-x参数传入时所设计的JAVA Swing图形化界面 -c 统计文件字符数 解题思路 -FileReader读入文件,读入时计数器同时递增即可记录文件字符数目,单文件不存在计数器置为-1,与空文件区别开 -l 统计文件行数 解题思路 通过文件读入方式以字符缓冲输入流读入,缓冲字符,从而实现以行读取并计数器计算出行数,文件不存在时同上处理 -w 统计文件单词数 解题思路 学习了正则表达式,readLine每行读入文件与正则表达式匹配从而计算出单词数,文件不存在同上处理 -a 统计文件空行,代码行,注释行 解题思路与代码 -s 递归处理目录下符合条件的文件。 解题思路 将非根目录文件夹的文件路径名通过递归方法放入List中 支持各种文件的通配符(*,?) 解题思路 使用的是JDK 1.7,Files.walkFileTree,经过学习发现比File类的遍历效率要高很多,FileFinder类继承FileVisitor适配器SimpleFileVisitor FileFinder: WordCounter的getRelatedFiles方法: -x 图形化界面功能 解题思路 根据Java的Swing设计界面,通过filechooser来选择文件进行wordcount功能演示。 界面设计部分具体太多则不贴出,下面只贴按钮监听事件部分: 命令行输入参数测试-c -w -l -a: 测试-s: 测试 -x: 测试文本文件: 在设计完成该项目的时候收获很多,认识到对自己个人项目的设计的不足,包括时间的分配不科学,以及设计过程中对某些细节没有仔细考虑清楚,就开始着手程序,导致后面做了很多调整,让我觉得以后自身在学习开发时要多在前期设计下多点功夫。同时深刻了解到自己代码的不规范所带的问题。这次课程项目的开发用到了Java开发,过程中也学习到了不少新的东西,对以前学的东西有了进一步的了解,包括对如何通配符支持的研究和对正则表达式的深一步理解运用。希望自己能够在以后的项目设计和编写中通过学习和反省从而达到高效。 Implementation of WC in JAVA 标签:记录 演示 改进 tmp lse 图片 ber 地址 stand 原文地址:https://www.cnblogs.com/laomiXD/p/9636161.htmlImplementation of WC in JAVA
相关要求
PSP
PSP2.1
Personal Software Process Stages
预估耗时(分钟)
实际耗时(分钟)
Planning
计划
· Estimate
· 估计这个任务需要多少时间
30
35
Development
开发
· Analysis
· 需求分析 (包括学习新技术)
180
120
· Design Spec
· 生成设计文档
120
60
· Design Review
· 设计复审 (和同事审核设计文档)
60
40
· Coding Standard
· 代码规范 (为目前的开发制定合适的规范)
100
60
· Design
· 具体设计
180
120
· Coding
· 具体编码
300
360
· Code Review
· 代码复审
60
30
· Test
· 测试(自我测试,修改代码,提交修改)
120
60
Reporting
报告
60
30
· Test Report
· 测试报告
60
60
· Size Measurement
· 计算工作量
60
30
· Postmortem & Process Improvement Plan
· 事后总结, 并提出过程改进计划
20
15
合计
1290
1020
设计说明
解题思路与关键代码
代码
public static int CharacterSum(File file) throws IOException {
int count_Char = 0;
if(!file.exists())
{
count_Char = -1;
return count_Char;
}
FileReader fr = new FileReader(file);
while(fr.read()!=-1)
{
count_Char++;
}
return count_Char;
}
public static int Rows_number(File file) throws IOException {
int count_Row = 0;
if(!file.exists())
{
count_Row = -1;
}
else
{
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String s = null;
while((s=br.readLine())!=null)
{
count_Row++;
}
}
return count_Row;
}
public static int word_cal(File file) throws IOException {
int count_Word = 0;
if(!file.exists())
{
count_Word = -1;
}
else
{
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String s = null;
while((s=br.readLine())!=null)
{
String reg = "\\d+.\\d+|\\w+";
Matcher mat = Pattern.compile(reg).matcher(s);
while(mat.find())
{
count_Word++;
}
}
}
return count_Word;
}
public static int isEmptyLine(File file) throws IOException {
int count_EmptyLine = 0;
if(!file.exists())
{
count_EmptyLine = -1;
}
else
{
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String s = null;
while((s=br.readLine())!=null)
{
if(s.trim().length()
public static int isCodeLine(File file) throws IOException {
int count_CodeLine = 0;
if(!file.exists())
{
count_CodeLine = -1;
}
else {
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String s = null;
Pattern p = Pattern.compile("\\/\\/[^\\n]*|\\/\\*([^\\*^\\/]*|[\\*^\\/*]*|[^\\**\\/]*)*\\*+\\/");
String tmp = null;
StringBuffer sb = new StringBuffer();
String target = null;
while ((s = br.readLine()) != null) {
s = s.trim();
int flag = 0;
int pos = 0;
for (int i = 1; i 1 && s.substring(0, 1).equals("*/")) {
sb.append("*/");
sb.append("\n");
sb.append(s.substring(2));
sb.append("\n");
} else {
sb.append(s);
sb.append("\n");
}
}
}
}
br.close();
target = sb.toString();
Matcher mat = p.matcher(target);
String res = null;
res = mat.replaceAll("");
BufferedReader context = new BufferedReader(new StringReader(res));
while((tmp=context.readLine())!=null)
{
if(tmp.trim().length()>1)
{
count_CodeLine++;
}
}
}
return count_CodeLine;
}
public static int isAnnotationLine(File file) throws IOException {
int count_Annotation = 0;
if(!file.exists())
{
count_Annotation = -1;
}
else
{
count_Annotation = Rows_number(file) - isEmptyLine(file) - isCodeLine(file);
}
return count_Annotation;
}
public static List
public class FileFinder extends SimpleFileVisitor
public static List
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) throws IOException, IOException {
// TODO add your handling code here:
jTextArea1.setText("");
JFileChooser jfc=new JFileChooser();
jfc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES );
jfc.showDialog(new JLabel(), "选择");
File file=jfc.getSelectedFile();
if(file.isDirectory()){
System.out.println("文件夹:"+file.getAbsolutePath());
}else if(file.isFile()){
System.out.println("文件:"+file.getAbsolutePath());
}
System.out.println(jfc.getSelectedFile().getName());
BufferedReader br = new BufferedReader(new FileReader(file));
String s = null;
while((s=br.readLine())!=null)
{
jTextArea1.append(s+"\n");
}
br.close();
int char_count = CharacterSum(file);
int word_count = word_cal(file);
int line_cunt = Rows_number(file);
int empty_line = isEmptyLine(file);
int code_line = isCodeLine(file);
int annotate_line = isAnnotationLine(file);
if(char_count==-1||word_count==-1||line_cunt==-1||empty_line==-1||code_line==-1||annotate_line==-1)
{
chara.setText("字符数:0");
jLabel2.setText("单词数:0");
jLabel3.setText("总行数:0");
jLabel4.setText("空行数:0");
jLabel5.setText("注释行:0");
jLabel6.setText("代码行:0");
}
else{
chara.setText("字符数: "+char_count);
jLabel2.setText("单词数: "+word_count);
jLabel3.setText("总行数: "+line_cunt);
jLabel4.setText("空行数: "+empty_line);
jLabel5.setText("注释行: "+annotate_line);
jLabel6.setText("代码行: "+code_line);
}
}
测试
#include
代码覆盖率
小结
文章标题:Implementation of WC in JAVA
文章链接:http://soscw.com/essay/100461.html