您的位置:首页 > 编程语言 > Java开发

java 正则表达式2 通过正则表达式统计代码行数

2014-06-15 14:15 706 查看
import java.io.*;
import java.util.regex.*;
import java.util.Scanner;
public class CodeCounter{
public static int whiteCount = 0;			//空白行
public static int normalCount = 0;			//代码行
public static int commentCount = 0;			//注释行
public static void main(String []args){
String filePath = "";
String endString = "";
Scanner scanner= new Scanner(System.in);
System.out.println("请输入您要统计的文件目录,或者文件名,分隔符为/");
filePath = scanner.nextLine();
File file = new File(filePath);

System.out.println("请输入一个您要统计的以什么为结尾的文件如: java");
endString = scanner.nextLine();

if(null == file){
System.out.println("打开文件失败,请查看路径是否正确");
return ;
}

if(file.isFile()){				//如果只是一个标准文件
if(file.getName().matches(".*\\."+endString+"$")){
parse(file);
}
}
else if(file.isDirectory()){//如果是一个目录
File[] childs = file.listFiles();
getCount(childs,endString);

}

/*if(file.isFile()){				//如果只是一个标准文件
if(file.getName().matches(".*\\."+endString+"$")){
parse(file);
}
}
else if(file.isDirectory()){//如果是一个目录
File[] childs = file.listFiles();
System.out.println(childs.length);
for(File child :childs){
if(child.getName().matches(".*\\."+endString+"$")){
parse(child);
}
}

}*/
System.out.println("空白行:"+whiteCount);
System.out.println("代码行:"+normalCount);
System.out.println("注释行:"+commentCount);
}
public static void getCount(File[]files,String endString){
for(File file :files){
if(file.isFile()){				//如果只是一个标准文件
if(file.getName().matches(".*\\."+endString+"$")){
parse(file);
}
}
else if(file.isDirectory()){//如果是一个目录
File[] childs = file.listFiles();
getCount(childs,endString);

}
}
}
private static void parse(File f){
BufferedReader br  = null;
String line = "";
boolean comment = false; 						//用来标识注释的开始于结束
try{
br = new BufferedReader(new FileReader(f));
while((line = br.readLine())!=null){			//该方法会去除结尾的\n
line = line.trim();
if(line.matches("^[\\t&&[^\\n]]*$")){
whiteCount++;
}else if(line.startsWith("/*")&&!line.endsWith("*/")){
commentCount++;
comment = true;
}else if (true == comment){
commentCount++;
if(line.endsWith("*/")){
comment = false;
}
}
else if(line.startsWith("//")){
commentCount++;
}
else{
normalCount++;
}

}
}catch (Exception e){
e.printStackTrace();
}finally{
try{
br.close();
br = null;
}catch(Exception e){
e.printStackTrace();
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐