亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Java代碼行統計程序

2019-11-14 22:32:25
字體:
來源:轉載
供稿:網友
java代碼行統計程序

1、統計粒度

能夠統計包括:代碼行數、注釋、空行、總行數。

2、適用的編程語言

目前只測試過Java,其它編程語言暫時未知。

3、代碼簡析

代碼行統計需要考慮的因素包括字符串匹配、編程語言本身的字符串,后者非常重要,往往導致難以發現的bug。該程序的核心在于遞歸的使用和棧的構造,需要深刻理解遞歸的原因和棧的幾種狀態。

4、參考程序

程序一:http://wenku.baidu.com/view/2a3dcbe3524de518964b7dec.html

程序二:http://www.downxia.com/downinfo/11131.html

程序三:https://code.google.com/p/boomworks/wiki/SourceCounterCN 版本:3.5.33.73 - Boom 2011-6-22

5、程序源代碼

  1 /**  2  * LOCStatistics application  3  * @author 鄺翼飛  4  * @version 1.0   5  * @date 2015/1/8  6  */  7   8 import java.io.BufferedReader;  9 import java.io.File; 10 import java.io.FileReader; 11 import java.util.Stack; 12  13 public class LOCStatistics { 14     PRivate long numCommentLine = 0; 15     private long numWhiteLine = 0; 16     private long numCodeLine = 0; 17     private long numTotalLine = 0; 18     private int numCompilationUnit = 0; 19     private boolean isCommenting = false; 20      21     public LOCStatistics(){} 22      23     public static void main(String[] args) { 24         String SRC_DIR = "D://InsightViewerTestCases//MethodSimilarityTest"; 25         LOCStatistics loc = new LOCStatistics(); 26         if(loc.generateResult(new File(SRC_DIR))) { 27             System.out.println("numCommentLine:/t" + loc.numCommentLine); 28             System.out.println("numWhiteLine:/t" + loc.numWhiteLine); 29             System.out.println("numCodeLine:/t" + loc.numCodeLine); 30             System.out.println("numTotalLine:/t" + loc.numTotalLine); 31             System.out.println("numCompilationUnit:/t" + loc.numCompilationUnit); 32         } 33         else { 34             System.out.println("Failed to generate results!"); 35         } 36     } 37      38     public boolean generateResult(File dir) { 39         if(dir==null || !dir.exists() || !dir.isDirectory()) { 40             return false; 41         } 42         isCommenting = false; 43         File[] files = dir.listFiles(); 44         for(int i = 0; i < files.length; i++) { 45             if (files[i].isDirectory()) { 46                 generateResult(files[i]); 47             }  48             else { 49                 try { 50                     if (files[i].getName().endsWith(".java")) { 51                         numCompilationUnit++; 52                         BufferedReader br = new BufferedReader(new FileReader(files[i])); 53                         String line = br.readLine(); 54                         while (line != null) { 55                             numTotalLine++; 56                             LineProperty lineProperty = extractLineProperty(line); 57                             if(lineProperty.hasComment) { 58                                 numCommentLine++; 59                             } 60                             if(lineProperty.hasCode) { 61                                 numCodeLine++; 62                             } 63                             if(!lineProperty.hasComment && !lineProperty.hasCode) { 64                                 numWhiteLine++; 65                             } 66                             line = br.readLine(); 67                         } 68                         br.close(); 69                     } 70                 }  71                 catch (Exception e) { 72                     e.printStackTrace(); 73                     return false; 74                 }  75             } 76         } 77         return true; 78     } 79      80     private LineProperty extractLineProperty(String line) { 81         line = line.trim(); 82         String subLine = null; 83         LineProperty lineProperty = new LineProperty(); 84         boolean hasCode = false; 85         boolean hasComment = false; 86         if(line.length() == 0) { 87             return lineProperty; 88         } 89         else if(isCommenting == true) { 90             hasComment = true; 91             if(line.matches(".*//*/.*")) { 92                 isCommenting = false; 93                 int index = line.indexOf("*/"); 94                 if(line.length() == index + 2) { 95                     hasCode = false; 96                 } 97                 else { 98                     subLine = line.substring(index + 2); 99                     lineProperty = extractLineProperty(subLine);100                     hasCode = lineProperty.hasCode;101                 }102             }103             else {104                 hasCode = false;105             }106         }107         else if(line.startsWith("http://")) {108             hasComment = true;109         }110         else if(line.startsWith("/*") && !line.matches(".{2,}//*/.*")){111             hasCode = false;112             hasComment = true;113             isCommenting = true;114         }115         else if(line.startsWith("/*") && line.matches(".{2,}//*/.*")) {116             if(!line.matches(".{2,}//*/.+")) {117                 hasCode = false;118                 hasComment = true;119             }120             else {121                 String tmps = line.substring(2);122                 subLine = tmps.substring(tmps.indexOf("*/")+2);/*/test*/123                 lineProperty = extractLineProperty(subLine);124                 hasCode = lineProperty.hasCode;125                 hasComment = true;126             }127         }128         else {129             hasCode = true;130             int x, y;131             x = line.indexOf("http://");132             y = line.indexOf("/*");133             if(x==-1 && y==-1) {134                 hasComment = false;135             }136             else {137                 Stack<Character> stack = new Stack<Character>();138                 int count = 0;139                 for(Character ch: line.toCharArray()) {140                     count++;141                     // 首先判斷上一個字符是否是轉義符 / 若是,則拋棄該字符142                     if(!stack.isEmpty() && stack.peek()=='//') {143                         stack.pop();144                         continue;145                     }146                     if(ch != '"'){147                         if(ch == '//') {148                             stack.push(ch);149                         }150                         else if(!stack.isEmpty() && stack.peek()=='"') {151                             continue;152                         }153                         else if(ch=='*' || ch=='/') {154                             if (stack.isEmpty()) {155                                 stack.push(ch);156                             }157                             else {158                                 if(stack.peek() == '/') {159                                     break;160                                 }161                                 else {162                                     stack.push(ch);163                                 }164                             }165                         }166                     }167                     else {168                         if(stack.isEmpty()) {169                             stack.push(ch);170                         }171                         else {172                             char tmp = stack.peek();173                             while(tmp!='"' && !stack.isEmpty()) {174                                 tmp = stack.pop();175                             }176                             if(tmp!='"' && stack.isEmpty()) {177                                 stack.push(ch);178                             }179                             else {180                                 while(!stack.isEmpty()) {181                                     stack.pop();182                                 }183                             }184                         }185                     }186                 }187                 if(count <= line.length()) {188                     subLine = line.substring(count-2);189                     lineProperty = extractLineProperty(subLine);190                     hasComment = lineProperty.hasComment;191                 }192                 else {193                     hasComment = false;194                 }195             }196         }197         lineProperty.hasCode = hasCode;198         lineProperty.hasComment = hasComment;199         return lineProperty;200     }201 202     public long getNumCommentLine() {203         return numCommentLine;204     }205 206     public void setNumCommentLine(long numCommentLine) {207         this.numCommentLine = numCommentLine;208     }209 210     public long getNumWhiteLine() {211         return numWhiteLine;212     }213 214     public void setNumWhiteLine(long numWhiteLine) {215         this.numWhiteLine = numWhiteLine;216     }217 218     public long getNumCodeLine() {219         return numCodeLine;220     }221 222     public void setNumCodeLine(long numCodeLine) {223         this.numCodeLine = numCodeLine;224     }225 226     public long getNumTotalLine() {227         return numTotalLine;228     }229 230     public void setNumTotalLine(long numTotalLine) {231         this.numTotalLine = numTotalLine;232     }233 234     public int getNumCompilationUnit() {235         return numCompilationUnit;236     }237 238     public void setNumCompilationUnit(int numCompilationUnit) {239         this.numCompilationUnit = numCompilationUnit;240     }241 }242 243 class LineProperty244 {245     public boolean hasCode = false;246     public boolean hasComment = false;247     public LineProperty() {248         this(false, false);249     }250     public LineProperty(boolean hasCode, boolean hasComment) {251         this.hasCode = hasCode;252         this.hasComment = hasComment;253     }254 }
View Code

6、測試用例

 1 import java.util.ArrayList; 2 import java.util.List; 3  4 @SuppressWarnings("rawtypes") 5 public class MethodSimilarityTest { 6  7     public void overLoad(AA a){} 8     public void overLoad(double x){} 9     public void overLoad(List list){}10     11     12     13     public static void main(String[] args) { 14 //        new MethodSimilarityTest().overLoad((new BB()).getAA());15 //        new MethodSimilarityTest().overLoad(1);16         new MethodSimilarityTest().overLoad(new ArrayList());17 /** // sfska */        String s = "/*dls"; // fsdafl18 /** // sfska */19         s = "/*dls"; 20     }21 22 }23 24 class AA25 { 26     public AA getAA(){return new AA();}27     public void c(int b){}28 }29 class BB extends AA30 {31     public BB(){this(1);this.c(1); }32     public BB(int x){}33 }
View Code


上一篇:JavaSE學習心得

下一篇:spring cron表達式

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品福利资源站| 国产精品高清网站| 亚洲国内精品在线| 国产欧美一区二区三区四区| 自拍偷拍亚洲欧美| 日韩精品高清在线| 色综合伊人色综合网| 久久亚洲综合国产精品99麻豆精品福利| www.欧美三级电影.com| 精品香蕉在线观看视频一| 日韩亚洲成人av在线| 日韩精品在线看| 2023亚洲男人天堂| 日韩在线视频网站| 亚洲性线免费观看视频成熟| 在线成人激情黄色| 国产精品jvid在线观看蜜臀| 美日韩在线视频| www高清在线视频日韩欧美| 国产精品偷伦一区二区| 在线成人免费网站| 国产黑人绿帽在线第一区| 亚洲最大福利视频| 国内精品久久久久影院优| 亚洲一区二区久久久| 91成人性视频| 91久久久久久| 成人午夜高潮视频| 国产精品福利在线| 日韩精品免费在线| 中文字幕精品av| 欧美伦理91i| 成人免费福利在线| 日本欧美一二三区| 国产欧美精品日韩精品| 精品视频9999| 91久久精品国产91久久性色| 亚洲欧美日韩一区二区在线| 亚洲欧美制服丝袜| 91精品一区二区| 性色av一区二区三区在线观看| 欧美有码在线观看视频| 亚洲国产日韩精品在线| 亚洲午夜性刺激影院| 日韩美女视频中文字幕| 国产成人av在线播放| 国产成人精品最新| 在线精品高清中文字幕| 92福利视频午夜1000合集在线观看| 国产精品美乳一区二区免费| 国产精品视频久| 亚洲成色www8888| 亚洲аv电影天堂网| 亚洲精品福利在线| 最近2019年中文视频免费在线观看| 国产脚交av在线一区二区| 成人黄色生活片| 一区二区中文字幕| 亚洲一区二区三区乱码aⅴ蜜桃女| 日韩电影免费观看在线| 国产啪精品视频网站| 最近中文字幕mv在线一区二区三区四区| 91高清视频免费观看| 亚洲国产精品国自产拍av秋霞| 欧美成人免费全部| 国语自产精品视频在免费| 日韩中文字幕视频在线观看| 国产精品高潮呻吟久久av野狼| 亚洲国产精彩中文乱码av| 成人免费观看49www在线观看| 国产成人精品免费久久久久| 九九九久久久久久| 日韩精品高清在线| 亚洲女人天堂色在线7777| 国产成人小视频在线观看| 亚洲第一中文字幕在线观看| 久色乳综合思思在线视频| 欧美性一区二区三区| 成人h片在线播放免费网站| 欧美日韩在线看| 国产精品久久国产精品99gif| 久久在线免费视频| 欧美精品一区在线播放| 亚洲免费中文字幕| 影音先锋欧美在线资源| 亚洲va久久久噜噜噜| 亚洲人成亚洲人成在线观看| 粉嫩老牛aⅴ一区二区三区| 日韩亚洲欧美中文在线| 91热精品视频| 亚洲欧美国产精品| 国产69久久精品成人看| 成人xxxx视频| 国内伊人久久久久久网站视频| 日韩在线观看免费av| 热久久99这里有精品| 国产一区二区三区精品久久久| 黑人巨大精品欧美一区二区一视频| 美女性感视频久久久| 精品女同一区二区三区在线播放| 91探花福利精品国产自产在线| 成人欧美一区二区三区在线| 欧美激情一区二区三区久久久| 丁香五六月婷婷久久激情| 丰满岳妇乱一区二区三区| 97精品国产91久久久久久| 国产精品老女人精品视频| 亚洲精品欧美一区二区三区| 日韩欧美精品在线观看| 欧美在线视频导航| 成人在线播放av| 亚洲电影免费观看| 欧美成人午夜激情视频| 懂色av一区二区三区| 日韩欧美在线视频日韩欧美在线视频| 热久久这里只有精品| 51ⅴ精品国产91久久久久久| 久久久亚洲福利精品午夜| www.久久久久| 国外成人性视频| 亚洲美女性视频| 日韩欧美成人网| 久久久久久久色| 青青久久av北条麻妃黑人| 亚洲欧洲免费视频| 久久久久久久一区二区三区| 韩国精品久久久999| 欧美人与性动交| 色多多国产成人永久免费网站| 91精品国产高清久久久久久久久| 国产视频亚洲视频| 亚洲天堂精品在线| 国产精品女主播视频| 不卡伊人av在线播放| 亚洲成年网站在线观看| 国产亚洲精品美女久久久| 欧美激情视频一区二区| 欧美成人精品在线播放| 日韩在线观看成人| 久久久久久久久91| 亚洲第一天堂无码专区| 日日摸夜夜添一区| 亚洲另类欧美自拍| 俺也去精品视频在线观看| 日韩av男人的天堂| 亚洲自拍偷拍网址| 美女少妇精品视频| 中文字幕日韩精品在线| 日韩视频免费中文字幕| 久久免费成人精品视频| 国产成人精品av在线| 欧美精品久久一区二区| 中文字幕自拍vr一区二区三区| 国产精品视频xxxx| 日韩经典中文字幕| 欧美丰满少妇xxxxx做受| 欧美夜福利tv在线| 91老司机精品视频| 成人免费激情视频| 午夜精品久久久久久久99热浪潮| 亚洲网址你懂得| 久久久久中文字幕| 成人av电影天堂| 亚洲一区亚洲二区亚洲三区|