正文

统计java源代码的物理行,逻辑行,注释行2006-12-26 17:40:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/bluedance/21963.html

分享到:

//不是纯注释行的算作逻辑行 package com.regex;import java.io.*;import java.net.URLDecoder;import java.util.regex.*;public class Regex { private int REMARK=0; private int LOGIC=0; private int PHYSIC=0; boolean start=false;   /**  * @param args  */ public static void main(String[] args) { //测试方法  // TODO Auto-generated method stub  Regex re=new Regex();  re.regCount("Regex.java");  System.out.println("remark Line: "+re.REMARK);  System.out.println("logic Line: "+re.LOGIC);  System.out.println("physic Line: "+re.PHYSIC);  }/**   * @author BlueDance  * @param s  * @deprecated count  */ public void regCount(String s){  String url=null;  try {   url=URLDecoder.decode(this.getClass().getResource(s).getPath(),"UTF-8");  } catch (Exception e) {   e.printStackTrace();   // TODO: handle exception  }  try {   BufferedReader br=new BufferedReader(new FileReader(new File(url)));   String s1=null;   while((s1=br.readLine())!=null){    PHYSIC++;    if(CheckChar(s1)==1){     REMARK++;     System.out.println("纯注释行:"+s1);    }    if(CheckChar(s1)==2){     LOGIC++;     REMARK++;     System.out.println("非纯注释行:"+s1);    }    if(CheckChar(s1)==3)     LOGIC++;   }  } catch (FileNotFoundException e) {   // TODO Auto-generated catch block   e.printStackTrace();  }catch(IOException e){   e.printStackTrace();  }   } /**  *   * @param s  * @return int  * @version check s  */ public int CheckChar(String s){  String s1=null;  if(s!=null)   s1=s.trim();    //System.out.println(regCheck(s1,re));  if(regCheck(s1,"(//.*)"))                 //判断//开头的为纯注释行   return 1;  if(regCheck(s1,"(.*[;{})] *//.*)"))       //判断不是//开头的非纯注释行   return 2;  if(regCheck(s1,"(//*.*)")){               //判断/*开头的纯注释行   start=true;   return 1;  }  if(regCheck(s1,"(.*[;{})]//*.*)")){       //判断不是/*开头的非纯注释行   start=true;   return 2;  }  if(regCheck(s1,"(.* */*/)")){             //判断*/结尾的纯注释行   start=false;   return 1;  }  if(regCheck(s1,"(.* */*/.*)")&&!strCheck(s1)){ //判断不是*/结尾的非纯注释行   if(strCheck(s1)){    start=false;    return 2;   }  }  if(start==true)                           //状态代码,start即/*开始时start=true*/结束时为false   return 1;  return 3;//ssssllll }//aeee /**  *   * @param s  * @param re  * @return boolean  */ public boolean regCheck(String s,String re){  //正则表达试判断方法  return Pattern.matches(re,s); } public boolean strCheck(String s){            //中间有*/的字符判断 此方法最关键  if(s.indexOf("*/")>0){                       int count=0;   String y[]=s.split("/*/");   boolean boo[]=new boolean[y.length];   for (int i = 0; i < y.length-1; i++) {    char c[]=y[i].toCharArray();    for (int j = 0; j < c.length; j++) {     if(c[j]=='\\'&&c[j+1]=='"'){      count++;     }    }    if(count%2==0){     if(countNumber("\"",y[i])%2!=0){      boo[i]=true;     }else{      boo[i]=false;     }    }else{     if(countNumber("\"",y[i])%2==0){      boo[i]=true;     }else{      boo[i]=false;     }    }       }   for(int i=0;i<boo.length;i++){    if(!boo[i])     return false;   }   return true;  }  return false; } public int countNumber(String s,String y){    //此方法为我前面写的字符串出现次数统计方法,不懂的可以看我前面的文章    int count=0;    String [] k=y.split(s);                          if(y.lastIndexOf(s)==(y.length()-s.length()))     count=k.length;    else     count=k.length-1;    if(count==0)     System.out.println ("字符串\""+s+"\"在字符串\""+y+"\"没有出现过");    else     return count;    return -1;  } }

阅读(4144) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册