java代码统计工具

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

在网上下了一个代码统计工具,发现统计的结果不正确,于是自己临时写了一个:package test;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class CodeCounter {
static long commentLine = 0;
static long whiteLine = 0;
static long normalLine = 0;
static long totalLine = 0;
static boolean comment = false;
public static void main(String[] args) {
File file = new File("D:\\workspace\\UEC\\src\\com\\uec\\"); // 在这里输入需要统计的文件夹路径
getChild(file);
System.out.println("normalLine: " + normalLine);
System.out.println("commentLine: " + commentLine);
System.out.println("whiteLine: " + whiteLine);
System.out.println("totalLine: " + totalLine);
}
private static void getChild(File child) { // 遍历子目录
if(child.getName().matches(".*\\.java$")) { // 只查询java文件
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(child));
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
String line = "";
try {
while((line = br.readLine()) != null) {
parse(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
if(child.listFiles() != null) {
for(File f : child.listFiles()) {
getChild(f);
}
}
}
private static void parse(String line) {
line = line.trim();
totalLine ++ ;
if(line.length() == 0) {
whiteLine ++ ;
}else if(comment) {
commentLine ++ ;
if(line.endsWith("*/")) {
comment = false;
}else if(line.matches(".*\\*/.+")) {
normalLine ++ ;
comment = false;
}
}else if(line.startsWith("//")) {
commentLine ++ ;
}else if(line.matches(".+//.*")) {
commentLine ++ ;
normalLine ++ ;
}else if(line.startsWith("/*") && line.matches(".+\\*/.+")) { commentLine ++ ;
normalLine ++ ;
if(findPair(line)) {
comment = false;
}else {
comment = true;
}
}else if(line.startsWith("/*") && !line.endsWith("*/")) { commentLine ++ ;
comment = true;
}else if(line.startsWith("/*") && line.endsWith("*/")) { commentLine ++ ;
comment = false;
}else if(line.matches(".+/\\*.*") && !line.endsWith("*/")) { commentLine ++ ;
normalLine ++ ;
if(findPair(line)) {
comment = false;
}else {
comment = true;
}
}else if(line.matches(".+/\\*.*") && line.endsWith("*/")) {
commentLine ++ ;
normalLine ++ ;
comment = false;
}else {
normalLine ++ ;
}
}
private static boolean findPair(String line) { // 查找一行中/*与*/是否成对出现int count1 = 0;
int count2 = 0;
Pattern p = pile("/\\*");
Matcher m = p.matcher(line);
while(m.find()) {
count1 ++ ;
}
p = pile("\\*/");
m = p.matcher(line);
while(m.find()) {
count2 ++ ;
}
return (count1 == count2);
}
}。

相关文档
最新文档