打印另一个文件的类名,内部变量和注释

时间:2012-02-27 03:45:36

标签: java if-statement

我需要一些帮助来编写一个可以浏览其他java文件并显示类名,int变量名和注释的类。

我有一个我试图在这里解析的测试类。

public class Test {
    private int x;
    private int y;
    private String s;
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        // more comments
        int l; //local variable
        l = 0;
    }
}

我想要获得的输出:

The Class name is : Test
There is an int variable named: x
There is an int variable named: y
Comment contains:  TODO Auto-generated method stub
Comment contains:  more comments
There is an int variable named: l
Comment contains: local variable

以下是我现在所拥有的课程的代码:

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.InputStreamReader;

class ExtractJavaParts {

    public static void main(String args[]){

        try{
            // Open the file that is the first 
            // command line parameter
            FileInputStream fstream = new FileInputStream("src/Test.Java");

            // Get the object of DataInputStream
            DataInputStream in = new DataInputStream(fstream);
            BufferedReader br = new BufferedReader(new InputStreamReader(in));
            String strLine;

            //Read File Line By Line            
            while ((strLine = br.readLine()) != null){
                // Print the content on the console
                if (strLine.contains("class")){
                    System.out.println ("The class name is: " + strLine.substring(strLine.indexOf("class ") + 6, strLine.indexOf("{")));
                }
                else if (strLine.contains("int")){
                    System.out.println("There is an int variable named: " + strLine.substring(strLine.indexOf("int ") + 4, strLine.indexOf(";")));
                }
                else if (strLine.contains("//")){
                    System.out.println("Comment contains: " + strLine.substring(strLine.indexOf("//") + 2));
                }
            }

            //Close the input stream
            in.close();
        }

        catch (Exception e){
            //Catch exception if any
            System.err.println("Error: " + e.getMessage());
        }
    }
}

这是目前的输出:

The class name is: Test 
There is an int variable named: x
There is an int variable named: y
Comment contains:  TODO Auto-generated method stub
Comment contains:  more comments
There is an int variable named: l

截至目前,该程序不会接受代码后发生的评论。我们非常感谢您提供任何帮助以获得所需的输出。非常感谢!

2 个答案:

答案 0 :(得分:1)

问题是你的代码中有一个int后跟一个注释。

当读取该行时,它会进入第一个“else if”语句,然后转到下一行。

尝试使用3个if语句而不是一个“if”和两个“else if”s

问题在于,对于任何一行,它都可以按照编码的方式通过 ONLY ONE 条件语句。这意味着如果你在同一行上有一个注释 AND ,它只会找到int,然后继续循环的下一次迭代

答案 1 :(得分:0)

这种方法不会很有效。您需要一个了解java源文件的解析器。您可以从许多处理源代码的开源工具开始。例如 - javancss或checkstylejavaparser

这个答案 - Java : parse java source code, extract methods - 有更多选项