Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaParser如何获取块语句的原始行大小?_Java_Javaparser - Fatal编程技术网

JavaParser如何获取块语句的原始行大小?

JavaParser如何获取块语句的原始行大小?,java,javaparser,Java,Javaparser,我正在使用JavaParser进行代码分析项目,在该项目中,我读取一个Java源文件并生成一个AST(抽象语法树)进行分析。我需要从AST中确定给定block语句跨越的原始行数 基本上我有这样一种方法: int numberOfLines(Node astNode){ .... } 我需要返回跨越的行数。例如: void something() { // hello world } 我将返回5 我曾尝试转换为字符串并计算行数,如下所示:new BufferedReader(new Stri

我正在使用JavaParser进行代码分析项目,在该项目中,我读取一个Java源文件并生成一个AST(抽象语法树)进行分析。我需要从AST中确定给定block语句跨越的原始行数

基本上我有这样一种方法:

int numberOfLines(Node astNode){
....
}
我需要返回跨越的行数。例如:

void something()
{
// hello world

}
我将返回5

我曾尝试转换为字符串并计算行数,如下所示:
new BufferedReader(new StringReader(nodeHere.toString())).lines().count()
,但由于缺少词法保存,这不起作用。。。例如,这样一行:“类TestClass{intx;inty;intzz(inta){returna;}}”变成10行:

class TestClass {

    int x;

    int y;

    int zz(int a) {
        return a;
    }
}
生成AST后,再转换回字符串,本质上是“美化”它。。。然而,JavaParser确实在range属性中保留了原始的“坐标”,所以也许可以以某种方式使用它


谢谢

您可以使用以下内容和属性。i、 例如
range.end.line-range.begin.line

您可以使用以下内容和属性。i、 例如
range.end.line-range.begin.line

这个答案可能已经很晚了,但这对我来说很有效

public void visit(MethodDeclaration method) {
     int methodBodyLength = method.getRange().map(range -> range.begin.line - range.end.line).orElse(0);
}

这个答案可能已经很晚了,但这对我来说很有效

public void visit(MethodDeclaration method) {
     int methodBodyLength = method.getRange().map(range -> range.begin.line - range.end.line).orElse(0);
}

如果AST中保留了足够的信息以获取行数,则这取决于您使用的词法分析器和解析器。仅使用了Javaparser…这取决于如果AST中保留了足够的信息以获取行数,则您使用的词法分析器和解析器。仅使用了Javaparser。。。