统计*.Java文件代码行数——正则表达式

import java.io.*;

/**
 * Created by isc on 2016/11/20.
 */
public class EffectiveLines {

    public static void main(String[]args){
        String filePath = "C:\\Users\\isc\\IdeaProjects\\regular_expression\\src\\package2\\Test2.java";
        System.out.println(calculateLinesAccordingPath(filePath));
    }

    private static String calculateLinesAccordingPath(String path) {
        File file = new File(path);
        if (file != null ) {
            return countCodeLines(file);
        } else {
            return "Wrong file,check your file!";
        }
    }

    /**
     *
     * @param file
     * @return 行数
     */
    private static String countCodeLines(File file){
        int lines=0;
        //判断是否为.java文件
        if(isJavaFile(file)){
            FileReader filereader = null;
            BufferedReader bufferReader=null;
            try{
                filereader = new FileReader(file);
                bufferReader = new BufferedReader(filereader);
                String lineContent;
                while(bufferReader.ready()){
                    //去掉开头可能存在的空格
                    lineContent = bufferReader.readLine().trim();
                   if(isBlankLine(lineContent))
                        continue;
                    if(isAnnotation(lineContent))
                        continue;
                    lines++;
                }
            }catch (Exception e){
                return e.getMessage();
            }finally {
                closeReader(filereader,bufferReader);
            }
        }
        return String.valueOf(lines) ;
    }

 private static boolean isJavaFile(File file){
        if(file.getName().matches(".*\\.java$")) {
            return true;
        }
        return false;
    }

    private static boolean isBlankLine(String lineContent){
        if(lineContent.matches("^[\\s && [^\\n]]*$"))
            return true;
        return false;
    }

    /*   注释的情况:
    * 1. /* 2. // 3. * 4.  */
    private static boolean isAnnotation(String lineContent){

        if((lineContent.matches("^/\\*.*")))  //   表示/*  \\表示转义  \\* —> *
            return true;
        if (lineContent.matches("^//.*"))    //  表示//
            return true;
        if(lineContent.matches("^\\*.*"))    // 表示 *
            return true;
        if(lineContent.matches(".*\\*/"))  //表示  */
            return true;
        return  false;
    }

    private static void closeReader(FileReader fileReader,BufferedReader bufferedReader){
        if (bufferedReader != null) {
            try {
                bufferedReader.close();
                if (fileReader != null) {
                    fileReader.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
代码比较简单,且关键部分有注释,就不另做解释说明了





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值