12.第十一节demo5CodeCounter--统计某文件夹下所有java文件中的空行和注释行的行数

    xiaoxiao2025-01-16  8

    package com.zzh.day2; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class demo5CodeCounter { private static int blankline = 0; private static int remarkline = 0; private static int normalline = 0; public static void main(String[] args) { // Pattern pblankline = Pattern.compile("^[\\s&&[^\\n]]*\\n$"); // Pattern premarkline = Pattern.compile("^[(/\\*)(//)]*\\*/$"); File file = new File("E:\\Java\\RrgExp\\src\\com\\zzh"); tral(file); System.out.println("空白行是:"+blankline); System.out.println("注释行是:"+remarkline); System.out.println("普通行是:"+normalline); } private static void tral(File file) { // TODO Auto-generated method stub File[] files = file.listFiles(); for(File f : files){ if (f.isDirectory()) { tral(f); }else if (f.isFile()) { if(f.getName().endsWith(".java")){ CodeCounter(f); } } } } private static void CodeCounter(File f) { // TODO Auto-generated method stub // Matcher mblankline = null; // Matcher mremarkline = null; FileReader fr = null; BufferedReader br = null; try { fr = new FileReader(f); br = new BufferedReader(fr); String string = ""; try { boolean flag_com = false; while((string = br.readLine()) != null){ // mblankline = p1.matcher(string); // mremarkline = p2.matcher(string); if (string.matches("^\\s*$")) { //System.out.println(string); blankline++; }else if (string.trim().startsWith("/*") && !string.endsWith("*/")) { //System.out.println(string); remarkline++; flag_com = true; }else if (flag_com) { //System.out.println(string); remarkline++; if(string.endsWith("*/")){ flag_com = false; } }else if (string.trim().startsWith("//")) { //System.out.println(string); remarkline++; }else { normalline ++; } } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { try { fr.close(); br.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }

    输出结果:

    空白行是:53 注释行是:105 普通行是:316

    递归遍历某文件夹下面的所有文件,遇见以.java结尾的文件就读取文件中的东西。

    匹配空行 ^\s*$ 以空白字符开头并且以空白字符结尾,中间若干个空白字符,这个应该是不严谨,路过的大佬动动小手,留下严谨的正则表达式。

    else if (string.trim().startsWith("/*") && !string.endsWith("*/")) { //System.out.println(string); remarkline++; flag_com = true; }else if (flag_com) { //System.out.println(string); remarkline++; if(string.endsWith("*/")){ flag_com = false; } }

    注意:在此处判断/*的时候,/*并不一定是第一个字符,其前面可能有若干个空白字符,所有使用trim()去掉。

    最新回复(0)