您现在的位置是:主页 > news > 手机营销网站制作/谷歌商店paypal官网下载
手机营销网站制作/谷歌商店paypal官网下载
admin2025/5/7 16:13:30【news】
简介手机营销网站制作,谷歌商店paypal官网下载,室内设计师联盟手机版,汕头网站建设过程正则表达式—代码统计小程序第一版代码统计小程序第二版代码统计小程序完整版代码统计小程序我把修改的地方都在注释说明清楚了,也对各个版本进行了说明!如果要直接使用,请到完整版!第一版代码统计小程序 代码统计小程序(统计有效…
手机营销网站制作,谷歌商店paypal官网下载,室内设计师联盟手机版,汕头网站建设过程正则表达式—代码统计小程序第一版代码统计小程序第二版代码统计小程序完整版代码统计小程序我把修改的地方都在注释说明清楚了,也对各个版本进行了说明!如果要直接使用,请到完整版!第一版代码统计小程序
代码统计小程序(统计有效…
我把修改的地方都在注释说明清楚了,也对各个版本进行了说明!
如果要直接使用,请到完整版!
正则表达式—代码统计小程序
- 第一版代码统计小程序
- 第二版代码统计小程序
- 完整版代码统计小程序
我把修改的地方都在注释说明清楚了,也对各个版本进行了说明!
如果要直接使用,请到完整版!
第一版代码统计小程序
代码统计小程序(统计有效的代码数量、空格数量、注释数量)
输出的结果空白行为0,是因为 readLine() 的时候把换行符给去掉了 ( readLine() 在 44行)
normalLines:497、commentLines:0、whiteLines:0
// 代码统计小程序(统计有效的代码数量、空格数量、注释数量)
// 输出的结果空白行为0,是因为 readLine() 的时候把换行符给去掉了 ( readLine() 在 44行)
// normalLines:497、commentLines:0、whiteLines:0
public class CodeCounter {// 有效代码行static long normalLines = 0;// 注释行static long commentLines = 0;// 空白行static long whiteLines = 0;public static void main(String[] args) {// File f = new File("E:\\gongfang\\JavaDemo\\linweimao\\javaWork\\Demo\\JavaDemo\\src\\pack02\\");File f = new File("E:\\gongfang\\JavaDemo\\code\\");// 找到这个文件夹下的所有子文件File[] codeFiles = f.listFiles();for (File child : codeFiles) {// 挨着排的拿到每个子文件然后进行统计// 当拿到一个文件之后,应该进行检测一下,这个文件的后缀名是以 .java结尾的,这样的文件才进行统计,否则没有统计的意义// 检测是否以.java结尾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 f) {BufferedReader br = null;boolean comment = false;try {br = new BufferedReader(new FileReader(f));String line = "";while ((line = br.readLine()) != null) {// ^如果位于[](中括号里)为取反// ^如果位于外面的话为 一行的起始位置(输入的开头)// 统计这一行是正常的代码,还是空行还是带注释的// 写一个正则表达式匹配空行,看看是不是空行// ^[\\s&&[^\\n]]*\\n$:开头是一个空的,并且不是 \n,(*)出现的是0次或者多次,(\\n$)最后结束的是一个\nif (line.matches("^[\\s&&[^\\n]]*\\n$")) {// 空白行whiteLines++;// startsWith 以什么开头(以/*开头的,并且不是以/*结尾,说明它是一个注释的开头)// 以/*开头的,并且不是以/*结尾:简单来说的话就是不是注释一行,是注释很多行} else if (line.startsWith("/*||") && !line.endsWith("*/")) {// 注释行加commentLines++;// 在注释中的内容怎么计算呢// 当以以/*开头的时候(使用comment = true;说明注释已经开始了)comment = true;} else if (true == comment) {commentLines++;// 本身这一行是以*/结尾的// 说明注释行到此结束了if (line.endsWith("*/")) {comment = false;}} 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();}}}}}
第二版代码统计小程序
CodeCounter1
会报空指针异常,因为 readLine() 读到最后一行已经是空值了(没有任何字符串),所以不对 (51行有问题(这里 br.readLine().trim())),应该修改成CodeCounter2的53行
所以53行不是[\s&&[\n]]\n$ , 应该是[\s&&[\n]]$
因为 readLine() 本身拿出这个字符串后,就把这个字符串后面的换行符给去掉了
// 这样会报空指针异常,因为 readLine() 读到最后一行已经是空值了(没有任何字符串),所以不对 (51行有问题(这里 br.readLine().trim())),应该修改成CodeCounter2的53行// 代码统计小程序(统计有效的代码数量、空格数量、注释数量)
// 输出的结果空白行为0,是因为 readLine() 的时候把换行符给去掉了 ( readLine() 在 44行)
// 所以53行不是^[\\s&&[^\\n]]*\\n$ , 应该是^[\\s&&[^\\n]]*$
// 因为 readLine() 本身拿出这个字符串后,就把这个字符串后面的换行符给去掉了public class CodeCounter1 {// 有效代码行static long normalLines = 0;// 注释行static long commentLines = 0;// 空白行static long whiteLines = 0;public static void main(String[] args) {// File f = new File("E:\\gongfang\\JavaDemo\\linweimao\\javaWork\\Demo\\JavaDemo\\src\\pack02\\");File f = new File("E:\\gongfang\\JavaDemo\\code\\");// 找到这个文件夹下的所有子文件File[] codeFiles = f.listFiles();for (File child : codeFiles) {// 挨着排的拿到每个子文件然后进行统计// 当拿到一个文件之后,应该进行检测一下,这个文件的后缀名是以 .java结尾的,这样的文件才进行统计,否则没有统计的意义// 检测是否以.java结尾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 f) {BufferedReader br = null;boolean comment = false;try {br = new BufferedReader(new FileReader(f));String line = "";// .trim()这里要去掉字符前的空格// 有下面两种情况(一种是正常的、一种是不正常的(会检查不到))
//前面没有空行为正常 可以把这个注释行加入//前面被tab一下了所以 不可以将这个注释加入while ((line = br.readLine().trim()) != null) {// ^如果位于[](中括号里)为取反// ^如果位于外面的话为 一行的起始位置(输入的开头)// 统计这一行是正常的代码,还是空行还是带注释的// 写一个正则表达式匹配空行,看看是不是空行// ^[\\s&&[^\\n]]*\\n$:开头是一个空的,并且不是 \n,(*)出现的是0次或者多次if (line.matches("^[\\s&&[^\\n]]*$")) {// 空白行whiteLines++;// startsWith 以什么开头(以/*开头的,并且不是以/*结尾,说明它是一个注释的开头)// 以/*开头的,并且不是以/*结尾:简单来说的话就是不是注释一行,是注释很多行} else if (line.startsWith("/*") && !line.endsWith("*/")) {// 注释行加commentLines++;// 在注释中的内容怎么计算呢// 当以以/*开头的时候(使用comment = true;说明注释已经开始了)comment = true;} else if (true == comment) {commentLines++;// 本身这一行是以*/结尾的// 说明注释行到此结束了if (line.endsWith("*/")) {comment = false;}} 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();}}}}}
完整版代码统计小程序
// 完整版// 代码统计小程序(统计有效的代码数量、空格数量、注释数量)
// 输出的结果空白行为0,是因为 readLine() 的时候把换行符给去掉了 ( readLine() 在 44行)
// 所以53行不是^[\\s&&[^\\n]]*\\n$ , 应该是^[\\s&&[^\\n]]*$
// 因为 readLine() 本身拿出这个字符串后,就把这个字符串后面的换行符给去掉了
// normalLines:497、commentLines:0、whiteLines:85
public class CodeCounter2 {// 有效代码行static long normalLines = 0;// 注释行static long commentLines = 0;// 空白行static long whiteLines = 0;public static void main(String[] args) {File f = new File("E:\\gongfang\\JavaDemo\\linweimao\\javaWork\\Demo\\JavaDemo\\src\\pack02\\");// File f = new File("E:\\gongfang\\JavaDemo\\code\\");// 找到这个文件夹下的所有子文件File[] codeFiles = f.listFiles();for (File child : codeFiles) {// 挨着排的拿到每个子文件然后进行统计// 当拿到一个文件之后,应该进行检测一下,这个文件的后缀名是以 .java结尾的,这样的文件才进行统计,否则没有统计的意义// 检测是否以.java结尾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 f) {BufferedReader br = null;boolean comment = false;try {br = new BufferedReader(new FileReader(f));String line = "";// .trim()这里要去掉字符前的空格// 有下面两种情况(一种是正常的、一种是不正常的(会检查不到))// 前面没有空行为正常 可以把这个注释行加入// 前面被tab一下了所以 不可以将这个注释加入while ((line = br.readLine()) != null) {line = line.trim();// ^如果位于[](中括号里)为取反// ^如果位于外面的话为 一行的起始位置(输入的开头)// 统计这一行是正常的代码,还是空行还是带注释的// 写一个正则表达式匹配空行,看看是不是空行// ^[\\s&&[^\\n]]*\\n$:开头是一个空的,并且不是 \n,(*)出现的是0次或者多次if (line.matches("^[\\s&&[^\\n]]*$")) {// 空白行whiteLines++;// startsWith 以什么开头(以/*开头的,并且不是以/*结尾,说明它是一个注释的开头)// 以/*开头的,并且不是以/*结尾:简单来说的话就是不是注释一行,是注释很多行} else if (line.startsWith("/*") && !line.endsWith("*/")) {// 注释行加commentLines++;// 在注释中的内容怎么计算呢// 当以以/*开头的时候(使用comment = true;说明注释已经开始了)comment = true;// 以/*开头的,并且以/*结尾,也是一行注释}// 其它的情况,如果 true == comment,说明注释已经开始了,然后 comment++else if (true == comment) {commentLines++;// 本身这一行是以*/结尾的,说明注释行到此结束了if (line.endsWith("*/")) {comment = false;}// 以 // 开头} else if (line.startsWith("/*") && line.endsWith("*/")) {commentLines++;} 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();}}}}}