当前位置: 首页 > 知识库问答 >
问题:

如何使用javaparser获取类级变量名称?

严元白
2023-03-14

我能够使用以下代码获得类级变量的声明。但我只需要变量名。这是以下代码的输出-[私有布尔标志=true;]

import com.github.javaparser.JavaParser;
import com.github.javaparser.ast.CompilationUnit;
import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration;
import com.github.javaparser.ast.visitor.VoidVisitorAdapter;
import java.io.FileInputStream;

public class CuPrinter{
    public static void main(String[] args) throws Exception {
        // creates an input stream for the file to be parsed
        FileInputStream in = new FileInputStream("C:\\Users\\arosh\\IdeaProjects\\Bot_Twitter\\src\\MyBot.java");

        CompilationUnit cu;
        try {
            // parse the file
            cu = JavaParser.parse(in);
        } finally {
            in.close();
        }
        cu.accept(new ClassVisitor(), null);
}
private static class ClassVisitor extends VoidVisitorAdapter<Void> {
    @Override
    public void visit(ClassOrInterfaceDeclaration n, Void arg) {
        /* here you can access the attributes of the method.
         this method will be called for all methods in this
         CompilationUnit, including inner class methods */
        System.out.println(n.getFields());
        super.visit(n, arg);
    }
  }
}

共有2个答案

戈睿识
2023-03-14

你可以试试这个。如果FieldDeclarations中有多个变量,请在内部使用多个for循环。

public void visit(ClassOrInterfaceDeclaration n, Void arg) {

    super.visit(n, arg);
    for(FieldDeclaration ff:n.getFields())
    {
        System.out.println(ff.getVariable(0).getName());
    }
} 
曾瀚昂
2023-03-14

您可以使用以下简单regex:

final String regex = "^((private|public|protected)?\\s+)?.*\\s+(\\w+);$";

然后可以将其编译为模式:

final Pattern pattern = Pattern.compile(regex);

然后最后用于for循环

for(final String field : n.getFields()){
    // create a regex-matcher
    final Matcher matcher = pattern.matcher(field);

    // if field matches regex
    if(matcher.matches()){
        // get the last group -> the fieldName
        final String name = matcher.group(matcher.groupCount());
        System.out.println("FieldName: " + name);
    }
}
 类似资料:
  • 我只想得到类级别的变量声明。如何使用javaparser获取声明? 使用javaparser必须获取变量“浏览器”的详细信息,例如浏览器的类型是“KeyWord”

  • 我正在分析的类: 我正在尝试使用MethodDeclaration获取变量名,但无法做到这一点。 我正在尝试获取此is的输出。 verifyAgeLimit():此。名称或名称 verifyAgeLimit():此。名称或名称 showAddress():此。地址或地址 我试图将整个方法转换为sting并读取字符串以找出名称,但它变得太复杂,而且精度也很低。 有什么办法可以解决吗?

  • 这是A.java 我想得到Newa. java 我想使用javaparser添加一个变量。

  • 如何获取到实体类的变量名,用的tkmybatis,没有方法引用,现在写的条件都是字符串"isDeleted"这种,不好维护,有没有方式Dog.的方式拿到变量名称,不想写好多常量,有没有类似Lombok注解的方式去实现

  • 问题内容: 使用Java Reflection,是否可以获得本地变量的名称?例如,如果我有这个: 是否有可能实现一种可以找到这些变量名称的方法,如下所示: 问题答案: 从Java 8开始,可以通过反射获得一些局部变量名称信息。请参阅下面的“更新”部分。 完整的信息通常存储在类文件中。一种编译时优化是删除它,节省空间(并提供一些混淆)。但是,如果存在,则每个方法都有一个局部变量表属性,该属性列出了局

  • 有可能得到变量名吗? 例如: 现在打印结果: 屏幕: