【发布时间】:2015-03-21 20:39:59
【问题描述】:
我有一些有趣的练习 - 用 Java 读取 .java 文件,找到这个 .java 文件中的每个代码部分(如方法等),并说出每个方法中有多少行号,没有空格和 cmets并且还可以找到每个方法中的项目数。
这是我使用的一些示例 - Java Parser 也是如此。通过代码,我可以说出我在方法中有多少行号,但不能删除空格和 cmets 的数量。有人可以帮我吗?
代码:
public static void main(String[] args) throws ParseException, IOException {
File f = new File(".").getAbsoluteFile();
File srcRoot = new File(f, "src");
String srcFilename = TestMethodLineNumber.class.getName().replaceAll("\\.", "/") + ".java";
File src = new File(srcRoot, srcFilename);
System.out.println(f);
System.out.println(srcRoot);
System.out.println(src);
getMethodLineNumbers(src);
}
private static void getMethodLineNumbers(File src) throws ParseException, IOException {
CompilationUnit cu = JavaParser.parse(src);
new MethodVisitor().visit(cu, null);
}
/**
* Simple visitor implementation for visiting MethodDeclaration nodes.
*/
private static class MethodVisitor extends VoidVisitorAdapter {
@Override
public void visit(MethodDeclaration m, Object arg) {
System.out.println("From [" + m.getBeginLine() + "," + m.getBeginColumn() + "] to [" + m.getEndLine() + ","
+ m.getEndColumn() + "] is method:");
System.out.println(m);
}
}
}
【问题讨论】:
-
欢迎来到 SO。请阅读How to Ask。您的问题是“为什么精简代码不起作用?”输入,而您还没有达到质量标准,所以我投票结束您的问题。
-
@EngineerDollery:他没有问为什么他的代码不起作用;他展示了计算答案的代码,他希望改进该答案。他想要一些关于如何改进他的答案的建议。
-
@akyurkchiev:您的代码使用方法的最左侧和最右侧节点计算大小。它不做的是下降进入树以查找cmets或空格并调整答案的方法;本质上,您需要遍历子树并检查代码叶之间的位置间隙。虽然我已经用另一个解析器/AST 系统做到了这一点,但我不是 AST Java 解析器专家,所以我无法为您提供太多细节;我敢肯定其他一些有进取心的人可能可以。
-
@IraBaxter -- 我已经形成了不同的意见,但我会向你更大的智慧低头,谢谢你的提醒。
-
如果我没有正确发布我的问题,我感到非常抱歉。 @IraBaxter 是对的,我只是寻求一些建议来改进我的代码 - 只计算代码并排除 cmets 和空格。我将不胜感激任何帮助或建议 :)