1. 程式人生 > >Java計算程式碼行數

Java計算程式碼行數

看到一個計算程式碼行數的機試題目,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(); } } } } }