我需要一些帮助来编写一个可以浏览其他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
截至目前,该程序不会接受代码后发生的评论。我们非常感谢您提供任何帮助以获得所需的输出。非常感谢!
答案 0 :(得分:1)
问题是你的代码中有一个int后跟一个注释。
当读取该行时,它会进入第一个“else if”语句,然后转到下一行。
尝试使用3个if语句而不是一个“if”和两个“else if”s
问题在于,对于任何一行,它都可以按照编码的方式通过 ONLY ONE 条件语句。这意味着如果你在同一行上有一个注释 AND ,它只会找到int,然后继续循环的下一次迭代
答案 1 :(得分:0)
这种方法不会很有效。您需要一个了解java源文件的解析器。您可以从许多处理源代码的开源工具开始。例如 - javancss或checkstyle或javaparser
这个答案 - Java : parse java source code, extract methods - 有更多选项