黑马程序员技术交流社区

标题: (正则表达式)代码统计小程序,输出的数据不正确。 [打印本页]

作者: 任文杰    时间: 2012-7-19 21:58
标题: (正则表达式)代码统计小程序,输出的数据不正确。
今天,有时间重新复习了下毕老师讲的正则表达式,想写个代码统计小程序,里面记录文件中空白行数、实际代码行数以及注释行数。输出的数据不正确,请教各位帮忙解决下,谢谢啊! 代码如下:


  1. import java.io.BufferedReader;
  2. import java.io.File;
  3. import java.io.FileNotFoundException;
  4. import java.io.FileReader;
  5. import java.io.IOException;
  6. public class CodeCounterTest {
  7.         private static long whiteLines = 0; //记录Java文件中所有的空白行
  8.         private static long normalLines = 0; //记录Java文件中所有的代码行
  9.         private static long commentLines = 0; //记录Java文件中所有的注释行
  10.         public static void main(String[] args) {
  11.                 File file = new File("e:\\jad\\");
  12.                 File[] codeFiles = file.listFiles();
  13.                 if ((codeFiles != null) && (codeFiles.length>0)) {
  14.                        
  15.                         for (File f: codeFiles) {
  16.                                 if (f.getName().matches(".*\\.java$")) {
  17.                                         parse(f);
  18.                                 }       
  19.                         }
  20.                 }       
  21.                 System.out.println("whiteLines: "+whiteLines);
  22.                 System.out.println("normalLines: "+normalLines);
  23.                 System.out.println("commentLines: "+commentLines);
  24.         }

  25.         private static void parse(File f) {
  26.                 BufferedReader br = null;
  27.                 String line = null;       
  28.                 boolean noteFlag = false;
  29.                 try {
  30.                         br = new BufferedReader(new FileReader(f));
  31.                        
  32.                         while ((line = br.readLine()) != null) {
  33.                                 if (line.matches("^[\\s]*$")) {
  34.                                         whiteLines ++;
  35.                                 } else if (line.startsWith("/*") && !line.endsWith("*/")) {
  36.                                         noteFlag = true;
  37.                                         commentLines ++;
  38.                                        
  39.                                 } else if (line.startsWith("/*") && line.endsWith("*/")) {
  40.                                         commentLines ++;
  41.                                 } else if (line.startsWith("//")) {
  42.                                         commentLines ++;
  43.                                 } else if (true == noteFlag) {
  44.                                         commentLines ++;
  45.                                         if (line.endsWith("*/")) {
  46.                                                 noteFlag = false;
  47.                                         }
  48.                                 }
  49.                                 else {
  50.                                         normalLines ++;
  51.                                 }
  52.                         }
  53.                 } catch (FileNotFoundException e) {
  54.                         e.printStackTrace();
  55.                 } catch (IOException e) {
  56.                         e.printStackTrace();
  57.                 } finally {
  58.                         if (br != null) {
  59.                                 try {
  60.                                         br.close();
  61.                                         br = null;
  62.                                 } catch (IOException e) {
  63.                                         e.printStackTrace();
  64.                                 }
  65.                         }
  66.                 }
  67.         }
  68. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2