丁又专老师作业——Java检测代码
package com.util;
import java.io.*;
import java.util.regex.Pattern;
/**
* 代码统计工具 * 统计某个java源文件或某个目录中所有java源文件中注释、空白行、代码行各占多少行 * 注释:包括单行注释(//)、多行注释、文档注释 * 空白行:一行内没有任何内容的表示空白行 * 代码行:以分号“;”结束的一条语句,可以统计为一行有效代码
*/
public class CodeCounter {
// 记录注释行数
static long annotationLine = 0;
// 记录空白行数
static long blankLine = 0;
// 记录有效代码的行数
static long codeLine = 0;
// 代码总行数
static long totalLine = 0;
// 文件总数
static long fileCount = 0;
public static void main(String[] args) throws FileNotFoundException {
File file = new File("/Users/YikaJ/Desktop/test.java");
//根据io读取文件
codeStat(file);
System.out.println("----------统计结果---------");
System.out.println("文件数量:" + fileCount + "个");
System.out.println(file + "文件/目录总行数:" + totalLine);
System.out.println("代码行数:" + codeLine);
System.out.println("注释行数:" + annotationLine);
System.out.println("空白行数:" + blankLine);
long otherLine = totalLine - (codeLine + annotationLine + blankLine);
System.out.println("其它行数:" + otherLine);
}
private static void codeStat(File file) throws FileNotFoundException {
if (file == null || !file.exists()) throw new FileNotFoundException(file + ",文件不存在!");
fileCount++; // 文件数累加
if (file.isDirectory()) {
File[] files = file.listFiles(new FileFilter() {
@Override //继承覆盖父类
public boolean accept(File pathname) {
return pathname.getName().endsWith(".java") || pathname.isDirectory();
}
});
//c#的是 foreach(File target in files)
for (File target : files) {
codeStat(target);
}
} else {
BufferedReader bufr;
try {
// 将指定路径的文件与字符流绑定
bufr = new BufferedReader(new FileReader(file));
} catch (FileNotFoundException e) {
throw new RuntimeException(file + ",文件不存在!" + e);
}
// 定义匹配每一行的正则匹配器
// 注释匹配器(匹配单行、多行、文档注释)
Pattern annotationLinePattern = Pattern.compile("((//)|(/\\*+)|((^\\s)*\\*)|((^\\s)*\\*+/))+", Pattern.MULTILINE + Pattern.DOTALL);
// 空白行匹配器(匹配回车、tab键、空格)
Pattern blankLinePattern = Pattern.compile("^\\s*$");
// 代码行匹配器(以分号结束为一行有效语句,包括import和package语句)
Pattern codeLinePattern = Pattern.compile(".+;\\s*(((//)|(/\\*+)).*)*", Pattern.MULTILINE + Pattern.DOTALL);
// 遍历文件中的每一行,并根据正则匹配的结果记录每一行匹配的结果
String line;
try {
while ((line = bufr.readLine()) != null) {
if (annotationLinePattern.matcher(line).find()) {
annotationLine++;
}
if (blankLinePattern.matcher(line).find()) {
blankLine++;
}
if (codeLinePattern.matcher(line).find()) {
codeLine++;
}
totalLine++;
}
} catch (IOException e) {
throw new RuntimeException("读取文件失败!" + e);
} finally {
try {
bufr.close();
// 关闭文件输入流并释放系统资源
} catch (IOException e) {
throw new RuntimeException("关闭文件输入流失败!");
}
}
}
}
}
对于,如何通过正则检验字符串中的"//out.print(var)"
,能力不足,还未实现。
丁又专老师作业——Java检测代码的更多相关文章
- java实现 HTTP/HTTPS请求绕过证书检测代码实现
java实现 HTTP/HTTPS请求绕过证书检测代码实现 1.开发需求 需要实现在服务端发起HTTP/HTTPS请求,访问其他程序资源. 2.URLConnection和HTTPClient的比较 ...
- Java第二次作业參考代码
Java第二次作业參考代码 [程序11] 题目:有1.2.3.4四个数字,能组成多少个互不同样且无反复数字的三位数?都是多少? public class lianxi11 { public stati ...
- 常用 Java 静态代码分析工具的分析与比较
常用 Java 静态代码分析工具的分析与比较 简介: 本文首先介绍了静态代码分析的基 本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代码分析工具 (Checkstyle,FindBu ...
- 用java具体代码实现分数(即有理数)四则运算
用java具体代码实现分数(即有理数)四则运算 1,背景 Java老师布置了一个关于有理数运算的题目,因为参考书上有基本代码,所以自己主要是对书上代码做了一点优化,使其用户交互性更加友好以及代码封装性 ...
- [转载] 常用 Java 静态代码分析工具的分析与比较
转载自http://www.oschina.net/question/129540_23043 简介: 本文首先介绍了静态代码分析的基本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代 ...
- 【转载】常用 Java 静态代码分析工具的分析与比较
摘自:http://www.oschina.net/question/129540_23043常用 Java 静态代码分析工具的分析与比较 简介: 本文首先介绍了静态代码分析的基本概念及主要技术,随后 ...
- 常用Java静态代码分析工具的分析与比较
给国产静态代码检测工具Pinpoint打Call! 简介 本文首先介绍了静态代码分析的基本概念及主要技术,随后分别介绍了4种现有的主流Java静态代码分析工具 (Checkstyle,FindBugs ...
- 1903021121-刘明伟-java十一周作业-java面向对象编程
项目 内容 课程班级博客链接 19级信计班(本) 作业要求链接 第十一周作业 博客名称 1903021121-刘明伟-java十一周作业-java面向对象 要求 每道题要有题目,代码(使用插入代码,不 ...
- pagebean pagetag java 后台代码实现分页 demo 前台标签分页 后台java分页
java 后台代码实现分页 demo 实力 自己写的 标签分页 package com.cszoc.sockstore.util; import java.util.HashMap;import ja ...
随机推荐
- PHP的线程安全与非线程安全版本的区别
Windows版的PHP从版本5.2.1开始有Thread Safe(线程安全)和None Thread Safe(NTS,非线程安全)之分,这两者不同在于何处?到底应该用哪种?这里做一个简单的介绍. ...
- 2014图灵技术图书最受欢迎TOP15
来自:图灵社区昨晚给我发的邮件,感觉不错,和大家分享,mark下. [小编语] 回首2014,感谢小伙伴们一路相随.让我们2015一起更快乐地玩耍.今天小编为大家盘点一下过去2014年表现最给力的技术 ...
- Could not write to output file 'c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\xx'
1.清了C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files 2.给上述文件夹EveryOne和IIS_Use ...
- jumplist和changlist
用jumplist可以在不同的访问过的位置之间跳转 C-O到上一个 C-I到下一个位置 :jumps列出跳转列表 changlist列出最近的改动点 g;到上一个,g,到下一个 :changes列出相 ...
- NDK(15)在ndk代码中注册和注销native函数
转自: http://www.cnblogs.com/canphp/archive/2012/11/13/2768937.html C和C++注册native函数的方式大致上相同,下面给出具体的代码 ...
- BZOJ 2339 卡农(组合数学)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2339 题意: 思路: i64 Pow(i64 a,i64 b,i64 mod){ ...
- BZOJ3759: Hungergame
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3759 题解:只想到了两种情况必胜,没有推广T_T 先说一下我想到了两种情况: 1)异或和为0 ...
- jquery获取div距离顶部的距离
获取元素到页面顶部距离的语句为: 1.jquery写法:$(“#divID”).offset().top //推荐 $("#vertical").position().top 2. ...
- HDU 4607 Park Visit (DP最长链)
[题目]题意:N个城市形成一棵树,相邻城市之间的距离是1,问访问K个城市的最短路程是多少,共有M次询问(1 <= N, M <= 100000, 1 <= K <= N). [ ...
- exec、eval
#!/usr/bin/env python3 # -*- coding: utf-8 -*- #info #warning def log(message): print('------------- ...