每次学习新的语言,就想重新实现一遍做过的课设=,=
这里实现的是"综合性实验 Java源代码分析程序"的第三部分
第二部分见:[Python编程]统计目录下Java源文件的关键字出现次数
原来的Java实现在这:
[Java]统计Java源文件代码行数,注释行数,空白行数
1.说明
在Java源程序中的行共有3种:
(1)代码行,可运行的Java源代码。例如:
int n = 10;
(2) 注释行,3种注释均可。例如:
/**
文档注释
*/
/*
多行注释
*/
//单行注释
(3)空行,既无代码,也无注释;
2. 代码实现
根据第二部分的统计关键字稍作修改得到,
逻辑很清晰:
1.读取一个文件,将文件分割为多行存在列表lines中
2.当前总行数+len(lines)
3.对lines使用line迭代,如果line==’’ 空白行数+1,继续下一行
4.如果line匹配为注释行 注释行数+1
5.否则,被匹配为代码行,代码行+1
row_count = blank_count = note_count = code_count = 0
def code_analyze(filepath):
with open(filepath) as file:
lines = file.read().strip().split('\n') # 一次性读取一个文件,并用换行分割每一行
global row_count, blank_count, note_count, code_count # 只是复习全局变量用法,不推荐
row_count += len(lines)
for line in lines:
if line == '':
blank_count += 1
continue
noteline = re.match(r'^/(.*)|^\*(.*)|(.*)\*/$', line.strip(), flags=0) # 匹配以/、/*、*开头 或*/结尾的注释行
if noteline is None: # 匹配为代码行
code_count += 1
else:
note_count += 1
3.测试
root = r'E:\java\util'
search(root)
for f in filelist: code_analyze(f)
print("源程序总行数:", row_count)
print("代码行数:", code_count, ",占", round(code_count / row_count*100, 2), "%")
print("注释行数:", note_count, ",占", round(note_count / row_count*100,2), "%")
print("空白行数:", blank_count, ",占", round(blank_count / row_count*100,2), "%")
对util文件夹进行测试(测试文档下载地址:百度网盘