正則表示式(十五)——統計程式碼中的程式碼行、註釋行和空白行
阿新 • • 發佈:2018-12-10
package com.wy.regular; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class RegularTest { static long normalLines = 0; static long commentLines = 0; static long whiteLines = 0; public static void main(String[] args) { File file = new File("D:\\xxx"); File[] codeFiles = file.listFiles(); // 檢查每一個檔案的字尾名 for (File child : codeFiles) { if (child.getName().matches(".*\\.java$")) { parse(child); } } System.out.println("normalLines:"+normalLines); System.out.println("commentLines:"+commentLines); System.out.println("whiteLines:"+whiteLines); } private static void parse(File file) { BufferedReader br = null; boolean comment = false; try { br = new BufferedReader(new FileReader(file)); String line = ""; while ((line = br.readLine()) != null) { // 去掉首尾的空格 line = line.trim(); if (line.matches("^[\\s&&[^\\n]]*$")) { whiteLines ++; } else if (line.startsWith("/*")&& !line.endsWith("*/")) { commentLines ++; comment = true; } else if (true == comment) { commentLines ++; if (line.endsWith("*/")) { comment = false; } } else if (line.startsWith("//")) { commentLines ++; } else { normalLines ++; } } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (br != null) { try { br.close(); br = null; } catch (IOException e) { e.printStackTrace(); } } } } }