美文网首页
读取代码中函数的个数java

读取代码中函数的个数java

作者: luence | 来源:发表于2019-12-03 11:08 被阅读0次

    package com.in;

    import org.apache.commons.lang.StringUtils;

    import java.io.*;

    public class readCode {

        public static final String CODE_GBK = "GBK";//解决乱码的

        public static final String CODE_UTF_8 = "UTF-8";

        public static void main(String[] ager){

            // 文件路径

            String filePath = "C:\\Users\\THINK\\Desktop\\源1.cpp";

            System.out.println(readCpp(filePath));

        }

        // 读取文件并解决乱码

        public static String readCpp(String filePath){

            FileInputStream fis = null;

            String line = "";//存放文本

            String regexBlankLine = "\\s*"; // 空行的正则

            String regexAnnotation = "\\s*/{2}.*"; // 单行注释的正则

            String regexAnnotationStart = "\\s*/\\x2A.*";// 多行注释开始标记

            String regexAnnotationEnd = "\\s*\\x2A/.*";// 多行注释结束

            String regexFunction = "(\\w+)\\s+[\\*,&]*\\s*(\\w+)\\s*\\(";//函数匹配 void demo(

            int countBlankLine = 0;//空行

            int countAnnotation = 0;//注释行

            int countOther = 0;//代码行

            int function = 0;//函数多少个

            int i = 0;// 计数器 记录函数是否缺 { } 括号问题

            int j = 0;// 计数器 记录函数是否缺 ( ) 括号问题

            int row = 0;//记录出现的第几行的

            int begin = 0;//记录函数的开始行数

            int end = 0;//记录函数的结束行数

            float average = 0;//平均数函数的平均行数

            int count = 0;// 总数 每个函数的总行数之和

            try {

                fis = new FileInputStream(filePath);

                InputStreamReader reader = new InputStreamReader(fis,CODE_GBK);

                BufferedReader br = new BufferedReader(reader);

                System.out.println("源程序:");

                while ((line = br.readLine()) != null) {

                    System.out.println(line);

                    ++row;// 用来记录行数的

                    // 多行注释统计

                    if (line.matches(regexAnnotationStart)) {

                        do {

                            ++countAnnotation;//记录注释行数

                            line = br.readLine();

                        } while (!line.matches(regexAnnotationEnd));

                    }

                    // 空行统计

                    if (line.matches(regexBlankLine)) {

                        ++countBlankLine;

                    } else if (line.matches(regexAnnotation)) {

                        // 单行注释统计

                        ++countAnnotation;

                    } else {

                        // 代码行

                        ++countOther;

                    }

                    // 括号匹配规则

                    if (line.indexOf("(")!=-1){

                        ++j; // 对计数器的累加 (

                        // 函数个数统计

                        if(StringUtils.substring(line,0,line.indexOf("(")+1).matches(regexFunction)){

                            ++function;// 函数累加

                            begin = row+1;//记录每个函数的开始行数

                        }

                    }

                    if (line.indexOf(")")!=-1){

                        --j;

                    }

                    if (line.indexOf("{")!=-1) {

                        ++i; // 对计数器的累加

                    }

                    if (line.indexOf("}")!=-1){

                        --i;

                        if(i==0){

                            end = row;

                            count += (end-begin+1);

                        }

                    }

                }

                // 函数平均行数统计

                if (i != 0 && j != 0){

                    System.out.println("缺括号阿");

                }else {

                    if (begin != 0 && end != 0 && i==0 && j==0 && function != 0){

                        average = (float) count/function;

                    }

                }

                br.close();

                reader.close();

            } catch (Exception e) {

                e.printStackTrace();

            } finally {

                if (fis != null) {

                    try {

                        fis.close();

                    } catch (IOException e) {

                        e.printStackTrace();

                    }

                }

            }

            return "**************************"+"\n"+

                    "信息统计如下:"+"\n"+

                    "**************************"+"\n"+

                    "总行数:" + row+"\n"+

                    "空行:" + countBlankLine+"\n"+

                    "注释行:" + countAnnotation+"\n"+

                    "代码行:" + countOther+"\n"+

                    "函数个数:" +function+"\n"+

                    "函数的平均行数:"+ average+"\n"+

                    "**************************";

        }

    }

    相关文章

      网友评论

          本文标题:读取代码中函数的个数java

          本文链接:https://www.haomeiwen.com/subject/rjhcgctx.html