使用IO流统计一个java文件中的代码行数,注释行数以及空格的行数 学的不好 请各位大侠多多指教呀 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我倒是写过解析代码的,你这种计算行数貌似需要比较良好的格式才好。按行读取行,如果line.reqlaceAll("\\s").equals("")那么就表示为空行如果读到/*那么表示为注释开始直到*/为结束。或者读到//表示这行之后都为注释。其余剩下的就是代码了 private int rowNumber;BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream("path")));while(br.readLine()!=null){rowNumber++;}System.out.println(rowNumber); 大一时候用C写过,那是没学过java和正则表达式,写起来比较麻烦,现在找不到源码了,用java加上正则表达式弄齐来比较简单了注释就有"//""/*************/""/* * /"这几种,空行就读取每一行让 然后str.trim().equals("")就行 import java.io.*;public class FileDemo { public static void main(String[] args) throws Exception { File f=new File("d:"+File.separator+"aa.txt"); FileReader s=new FileReader(f); BufferedReader br=new BufferedReader(s); int WordCount=0; int lineNum=0; int SpaceCount=0; String str=""; //按行读取 while((str=br.readLine())!=null){ WordCount+=str.length(); //字数等于读取到的每行的个数累加 lineNum++; //行数累加 char[] c=str.toCharArray();//打散字符串成单个字符并放入数组 //遍历数组,判断数组中的元素是否等于空,是则数量累加 for(int i=0;i<c.length;i++){ if(c[i]==' ') { SpaceCount++; } } } System.out.println("行数"+lineNum); System.out.println("空格数"+SpaceCount); System.out.println("字数"+WordCount); }} 如果有如下注释,注释嵌套在一起,因此,在统计注释数目时,就要忽略任何一个注释中的任意内容(例如/*)所以在统计时,要匹配到以下两项:注释开头和注释结尾/* * /** * //注释内容中有两个斜杠 * /*注释内容中有一个斜杠和星号 * /前提:Java源码中的注释是完整的,既有开头,又有结尾(1)如果要统计java源代码中的注释数目,每次读取一行,(2)一直到,在某一行中出现"//"或"/*"或"/**",若同时出现三个中的两个或者全部,以最前面的为注释开头;(3)然后接着逐行读取源码内容,忽略注释中的内容;(4)一直到,在某一行中出现与前面注释开头对应的注释结尾,若同时出现多个,以最后面的为注释结尾;(5)这就是一个完整的注释,然后在表示注释数目的变量上 +1;(6)重复此过程,一直到,文件读取到尽头附://比较特殊,若//为注释开头,则它没有对应的注释结尾,应该直接 +1 java的线程池 CheckBox的监听器怎么使用?? Properties的问题 为什么不能打包 小弟对javax.swing.*的一些疑问? 求救:自定义Ant任务出错。 如何判断一个字符是否为中文 在JAVA中如何连接SQL Server数据库?请大家帮忙!谢谢! 带参数的程序运行不了! 急救!!!!!!!!!!!!!!Tomcat罢工=======>高分相谢 用HttpClient下载到图片之后,怎么让图片放大? oracle数据库插入数据后 数据内容跟插入的不同
按行读取行,如果line.reqlaceAll("\\s").equals("")那么就表示为空行
如果读到/*那么表示为注释开始直到*/为结束。或者读到//表示这行之后都为注释。
其余剩下的就是代码了
private int rowNumber;
BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream("path")));
while(br.readLine()!=null){
rowNumber++;
}
System.out.println(rowNumber);
"/*
*
/"这几种,空行就读取每一行让 然后str.trim().equals("")就行
public class FileDemo {
public static void main(String[] args) throws Exception {
File f=new File("d:"+File.separator+"aa.txt");
FileReader s=new FileReader(f);
BufferedReader br=new BufferedReader(s);
int WordCount=0;
int lineNum=0;
int SpaceCount=0;
String str="";
//按行读取
while((str=br.readLine())!=null){
WordCount+=str.length(); //字数等于读取到的每行的个数累加
lineNum++; //行数累加
char[] c=str.toCharArray();//打散字符串成单个字符并放入数组
//遍历数组,判断数组中的元素是否等于空,是则数量累加
for(int i=0;i<c.length;i++){
if(c[i]==' ')
{
SpaceCount++;
}
}
}
System.out.println("行数"+lineNum);
System.out.println("空格数"+SpaceCount);
System.out.println("字数"+WordCount);
}}
所以在统计时,要匹配到以下两项:注释开头和注释结尾/*
* /**
* //注释内容中有两个斜杠
* /*注释内容中有一个斜杠和星号
* /前提:Java源码中的注释是完整的,既有开头,又有结尾
(1)如果要统计java源代码中的注释数目,每次读取一行,
(2)一直到,在某一行中出现"//"或"/*"或"/**",若同时出现三个中的两个或者全部,以最前面的为注释开头;
(3)然后接着逐行读取源码内容,忽略注释中的内容;
(4)一直到,在某一行中出现与前面注释开头对应的注释结尾,若同时出现多个,以最后面的为注释结尾;
(5)这就是一个完整的注释,然后在表示注释数目的变量上 +1;
(6)重复此过程,一直到,文件读取到尽头
附://比较特殊,若//为注释开头,则它没有对应的注释结尾,应该直接 +1