`

统计代码行数(正则表达式)

阅读更多
package com.yonge.test;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class Test {

	private static int commen, white, normal;

	public Test() {
	}

	private static void countCode(File file) {
		// 判断是否是.java结尾的文件
		if (file.getName().matches(".*\\.java$")) {
			FileReader fr = null;
			BufferedReader br = null;
			try {
				fr = new FileReader(file);
				br = new BufferedReader(fr);
				String lineContent;
				boolean isCommen = false;
				try {
					while (br.ready()) {
						// 由于可能头存在空格,我们加trim()方法
						lineContent = br.readLine().trim();
						// 先判断注释行
						if (lineContent.matches("^//.*")) {
							commen++;
						} else if (lineContent.matches("^/\\*.*")
								&& !lineContent.matches(".*\\*/$")) {
							commen++;
							isCommen = true;
						} else if (isCommen) {
							commen++;
							if (lineContent.matches(".*\\*/$")) {
								isCommen = false;
							}
						} else if (lineContent.matches("^/\\*.*")
								&& lineContent.matches(".*\\*/$")) {
							commen++;
						}
						// 判断空白行
						else if (lineContent.matches("^[\\s && [^\\n]]*$")) {
							white++;
						} else {
							normal++;
						}
					}
				} catch (IOException e) {
					e.printStackTrace();
				}
			} catch (FileNotFoundException e) {
				e.printStackTrace();
				System.out.println("文件【" + file.getAbsolutePath() + "】不存在");
			} finally {
				if (br != null) {
					try {
						br.close();
						if (fr != null) {
							fr.close();
						}
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
			}
		}
	}

	public static void main(String[] args) {

		String filePath = "C:\\Users\\yonge\\workspace\\regex";
		File file = new File(filePath);
		File[] files = file.listFiles();
		if (files != null && files.length > 0) {
			for (File f : files) {
				readDirectory(f);
			}
		}
		System.out.println("空白行数:" + white);
		System.out.println("注释行数:" + commen);
		System.out.println("有效行数:" + normal);
	}

	/**
	 * 递归目录
	 * @param file
	 */
	private static void readDirectory(File file) {
		if (file.isDirectory()) {
			File[] files = file.listFiles();
			for (File f : files) {
				readDirectory(f);
			}
		} else {
			countCode(file);
		}
	}
}

 

分享到:
评论

相关推荐

    visual studio和eclipse如何统计代码行数

    在 Visual Studio 和 Eclipse 中,统计代码行数可以通过使用正则表达式和搜索功能来实现。 Visual Studio 中的代码行数统计 在 Visual Studio 中,可以使用 "Find in Files" 功能来统计代码行数。具体步骤如下: ...

    C#有效代码行数统计

    这些工具不仅可以统计代码行数,还能提供复杂度分析、重复代码检测等功能,有助于提高代码质量。 在C#的统计过程中,可能会遇到以下挑战: 1. **处理嵌套结构**:C#支持多层嵌套的控制结构(如if、for、while),...

    C++代码实例:正则表达式

    ### C++代码实例:正则表达式 #### 知识点概述 本示例通过一个C++程序展示了如何实现简单的正则表达式匹配。在实际应用中,正则表达式是一种强大的文本处理工具,用于模式匹配、搜索和替换等操作。在本案例中,...

    正则表达式.rar

    - 使用正则表达式可以编写代码统计程序,例如计算源码文件中的单词数量、行数或特定关键字出现次数。 7. **抓取网页中的email地址** - 正则表达式非常适合从HTML文本中提取电子邮件地址,通过定义符合电子邮件...

    使用正则表达式高效统计代码

    标题“使用正则表达式高效统计代码”暗示了本文将探讨如何利用正则表达式这一强大的文本处理工具来高效地统计代码中的特定模式或结构。正则表达式(Regular Expression)是计算机科学中用于匹配字符串的一种模式匹配...

    php统计php代码行数程序

    首先,我们要明白代码行数统计并不简单地是计算文本文件中的换行符数量,因为注释行和空行也需要被排除。在PHP中,我们可以通过读取文件内容,然后进行字符串处理来实现这一目标。以下是一个简单的PHP脚本示例,用于...

    统计源代码行数及有效代码

    在软件开发过程中,统计源代码行数(Lines of Code, LOC)是一种常见的度量方法,用于评估项目的规模、复杂性和工作量。统计源代码行数不仅包括实际的可执行代码,还包括注释和空行。然而,对于有效的代码行数,通常...

    java 统计代码行数

    在Java编程语言中,统计代码行数是一项常见的需求,它可以帮助开发者评估项目规模,跟踪代码增长,以及在软件维护和优化时提供参考。本篇文章将详细介绍如何使用Java来实现这一功能,同时考虑到不同文件格式的支持。...

    正则表达式例子

    10. **特殊应用**:"统计程序代码总行数.java"可能是使用正则表达式统计代码行数的程序,通常会匹配注释行、空行以及代码行。 11. **重复次数匹配**:"重复次数匹配.java"可能涉及到了使用正则表达式来匹配特定字符...

    正则表达式REGULAREXPRESSIONS[汇编].pdf

    - 代码统计,如计算代码行数、注释行数等。 在编写正则表达式时,需要特别注意转义字符 `\` 的使用,因为 `\` 在正则表达式中具有特殊含义,所以通常需要使用 `\\` 来匹配一个实际的反斜杠字符。同时,正确理解和...

    文本三剑客之grep及正则表达式 -.pdf

    ### 文本三剑客之grep及正则表达式 #### 1. grep 命令简介 - **定义**:`grep` 是 Linux 和 Unix 系统中的一种强大的文本搜索工具,它能够使用正则表达式来搜索文本,并将匹配的行打印出来。其全称是 Global ...

    代码行数统计

    4. **自动化脚本**:编写自定义脚本,利用正则表达式或其他解析技术,对非Java文件进行行数统计。 在实际开发中,除了代码行数外,质量、可读性和复杂性也是评估代码的重要因素。因此,虽然代码行数是一个直观的...

    文件行数统计程序代码.zip_代码统计_统计代码行数

    在编程和软件开发中,统计代码行数是一项常见的任务,特别是在项目管理、代码审计或性能评估时。"文件行数统计程序代码.zip"是一个压缩包,包含用于统计代码行数的程序代码。这个程序可能是一个命令行工具或者一个库...

    统计C#代码行数(转)

    这些工具不仅统计代码行数,还能提供更复杂的度量,比如圈复杂度、可维护性指数等,帮助开发者评估代码质量。 值得注意的是,代码行数并非衡量代码质量的唯一标准,代码的结构、可读性、复用性和错误率等因素同样...

    代码行数统计软件 统计有效代码

    自己写的一个 简单的java代码行数统计软件 可以统计你的工作量 统计你一个文件夹下的代码 有效代码行数,空行数,注释行数 包括子文件夹下的代码 如果需要源码 请联系本人

    统计路径下所有文件任意格式代码行数

    在IT行业中,统计代码行数是一项常见的任务,特别是在软件开发、项目管理和代码审计的过程中。这个压缩包提供的工具显然是为了帮助用户快速、方便地在Windows环境下完成这个任务,无需额外的配置,只需解压后运行run...

    使用PHP统计PHP代码行数1

    在案例中,我们展示了统计代码行数的实现效果,以及在实际运行时的网页测试过程。通过这种方法,我们可以快速获取PHP项目的代码结构信息,这对于代码维护、性能分析和代码质量评估都非常有帮助。

    快速代码行数统计.rar

    统计代码行数的基本原理通常基于文本处理,因为代码本质上是文本形式存在的。它会遍历文件中的每一行,通过识别换行符(如 `\n`)来计数。这种方法适用于大多数文本编辑器和编程语言,但需要注意的是,不同的编程...

    统计代码行数

    统计代码行数的方法有很多种,可以手动进行,也可以借助自动化工具。例如: - **手动统计**:这通常适用于小项目,逐行检查代码并分类。 - **自动化工具**:对于大型项目,可以使用诸如`cloc`(Count Lines of Code...

    正值表达式匹配html标签的属性值

    例如统计代码行数,只需一个正则就搞定。嵌套Html标签的匹配是正则表达式应用中一个比较难的话题,因为它涉及到的正则语法比较多,也比较难。因此也就更有研究的价值。 今天由于工作的需求,需要获取html标签的属性...

Global site tag (gtag.js) - Google Analytics