Java計算程式碼行數
阿新 • • 發佈:2019-01-27
看到一個計算程式碼行數的機試題目,demo如下:
package demo;
import java.io.*;
/**
* 統計程式碼行數demo
* author:lizhi
*/
public class StatisticCodeLines {
public static int normalLines = 0; //有效程式行數
public static int whiteLines = 0; //空白行數
public static int commentLines = 0; //註釋行數
public static void main(String[] args) throws IOException {
File file = new File("D:\\workplace\\lzwebparent\\src\\main\\demo");
if (file.exists()) {
statistic(file);
}
System.out.println("總有效程式碼行數: " + normalLines);
System.out.println("總空白行數:" + whiteLines);
System.out.println("總註釋行數:" + commentLines);
System.out.println("總行數:" + (normalLines + whiteLines + commentLines));
}
private static void statistic(File file) throws IOException {
if (file.isDirectory()) {
File[] files = file.listFiles();
for (int i = 0; i < files.length; i++) {
statistic(files[i]);
}
}
if (file.isFile()) {
//統計副檔名為java的檔案
if (file.getName().matches(".*\\.java")) {
parse(file);
}
}
}
public static void parse(File file) {
BufferedReader br = null;
// 判斷此行是否為註釋行
boolean comment = false;
int temp_whiteLines = 0;//空白行數
int temp_commentLines = 0;//註釋行數
int temp_normalLines = 0; //有效程式行數
try {
br = new BufferedReader(new FileReader(file));
String line = "";
while ((line = br.readLine()) != null) {
line = line.trim();
if (line.matches("^[\\s&&[^\\n]]*$")) {
// 空行
whiteLines++;
temp_whiteLines++;
}else if (line.startsWith("/*") && line.endsWith("*/")) {
// 判斷此行為"/*xxx*/"的註釋行
commentLines++;
temp_commentLines++;
} else if (line.startsWith("/*") && !line.endsWith("*/")) {
// 判斷此行為"/*"開頭的註釋行
commentLines++;
temp_commentLines++;
comment = true;
} else if (comment == true && !line.endsWith("*/")) {
// 為多行註釋中的一行(不是開頭和結尾)
commentLines++;
temp_commentLines++;
} else if (comment == true && line.endsWith("*/")) {
// 為多行註釋的結束行
commentLines++;
temp_commentLines++;
comment = false;
} else if (line.startsWith("//")) {
// 單行註釋行
commentLines++;
temp_commentLines++;
} else {
// 正常程式碼行
normalLines++;
temp_normalLines++;
}
}
System.out.println("有效行數" + temp_normalLines +
" ,空白行數" + temp_whiteLines +
" ,註釋行數" + temp_commentLines +
" ,總行數" + (temp_normalLines + temp_whiteLines + temp_commentLines) +
" " + file.getName());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
br = null;
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}