精确统计代码量(Java实现)

xiaoxiao2021-02-28  22

大家面试的时候有没有被问到过这样一个问题:

你的代码量是多少?

WHAT???代码量???我怎么知道,难

道要我去数吗?

下面有简便方法实现:

方法一:

利用Eclipse开发工具可以简单的统计一个项目里面的代码行数

1、如图1,选中打开的一个项目右击,选中“search”选项,出现一个弹框;

2、在图2中的弹框中,输入如下所示内容,点击“search”,就会出现结果;

3、结果如图3:

方法二:

想要精确统计代码量,去掉空白行!去掉注释!没有问题啊,下面我们就用Java来实现吧,什么都不说了,直接上代码:

import java.io.BufferedReader; import java.io.File; import java.io.FileReader; public class CalculateRows {     static long classcount = 0; // Java类的数量     static long normalLines = 0; // 空行     static long commentLines = 0; // 注释行     static long writeLines = 0; // 代码行     static long allLines = 0; // 代码行       public static void main(String[] args) throws Exception {         File f = new File("D:/xampp/htdocs/Crazy"); // 目录         String type = ".java";//查找什么类型的代码,如".java"就是查找以java开发的代码量,".php"就是查找以PHP开发的代码量         CalculateRows.treeFile(f,type);         System.out.println("路径:" + f.getPath());         System.out.println(type+"类数量:" + classcount);         System.out.println("代码数量:" + writeLines);         System.out.println("注释数量:" + commentLines);         System.out.println("空行数量:" + normalLines);         if(classcount==0){             System.out.println("代码平均数量:" + 0);         }else{             System.out.println("代码平均数量:" + writeLines / classcount);         }         System.out.println("总 行数量:" + allLines);     }       /**      * 查找出一个目录下所有的.java文件      *      * @throws Exception      */       public static void treeFile(File f,String type) throws Exception {         File[] childs = f.listFiles();         for (int i = 0; i < childs.length; i++) {             File file = childs[i];             if (!file.isDirectory()) {                 if (file.getName().endsWith(type)) {                     classcount++;                     BufferedReader br = null;                     boolean comment = false;                     br = new BufferedReader(new FileReader(file));                     String line = "";                     while ((line = br.readLine()) != null) {                         allLines++;                         line = line.trim();                         if (line.matches("^[//s&&[^//n]]*$")) {//这一行匹配以空格开头,但不是以回车符开头,但以回车符结尾                             normalLines++;                         } else if (line.startsWith("/*")                                 && !line.endsWith("*/")) {//匹配以/*......*/括住的多行注释                             commentLines++;                             comment = true;                         } else if (true == comment) {                             commentLines++;                             if (line.endsWith("*/")) {                                 comment = false;                             }//匹配以//开头的单行注释,及以/*......*/括住的单行注释                         } else if (line.startsWith("//") || (line.startsWith("/*")&&line.endsWith("*/"))) {                             commentLines++;                         } else {//其他的就是代码行                             writeLines++;                         }                     }                     if (br != null) {                         br.close();                         br = null;                     }                 }             } else {                 treeFile(childs[i],type);             }         }     } }

结果如下所示:

转载请注明原文地址: https://www.6miu.com/read-750261.html

最新回复(0)