Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.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
以编程方式查找java类中的文本_Java_Literals - Fatal编程技术网

以编程方式查找java类中的文本

以编程方式查找java类中的文本,java,literals,Java,Literals,我发现Java文本是布尔、字符、数字或字符串数据的语法表示 我的问题是如何以编程方式在java类中查找文本 如果有人能为我提供如何实现这一点的指导,那将是一个很大的帮助。您应该使用Java代码解析器,比如EclipseJDT工具中包含的ASTParser // Create the Java parser and parse the source code into an abstract syntax tree ASTParser parser = ASTParser.newParser(AS

我发现Java文本是布尔、字符、数字或字符串数据的语法表示

我的问题是如何以编程方式在java类中查找文本


如果有人能为我提供如何实现这一点的指导,那将是一个很大的帮助。

您应该使用Java代码解析器,比如EclipseJDT工具中包含的ASTParser

// Create the Java parser and parse the source code into an abstract syntax tree
ASTParser parser = ASTParser.newParser(AST.JLS3);
parser.setSource(sourceCodeString.toCharArray());
CompilationUnit result = (CompilationUnit) parser.createAST(null);
result.accept(new ASTVisitor() {
  public boolean visit(NumberLiteral n) {
    System.out.println("Found number literal in source code: " + n.getToken());
  }
});
然后,您可以浏览AST(抽象语法树)并提取您感兴趣的内容

找到更长的例子或例子


您还可以查看做您想做的事情的工具的源代码,例如PMD或Findbugs(尽管后者在编译类上运行,而不是在源代码上)。

您应该使用Java代码解析器,例如Eclipse JDT工具中包含的ASTParser

// Create the Java parser and parse the source code into an abstract syntax tree
ASTParser parser = ASTParser.newParser(AST.JLS3);
parser.setSource(sourceCodeString.toCharArray());
CompilationUnit result = (CompilationUnit) parser.createAST(null);
result.accept(new ASTVisitor() {
  public boolean visit(NumberLiteral n) {
    System.out.println("Found number literal in source code: " + n.getToken());
  }
});
然后,您可以浏览AST(抽象语法树)并提取您感兴趣的内容

找到更长的例子或例子


您还可以查看做您想做的事情的工具的源代码,例如PMD或Findbugs(尽管后者在编译类上运行,而不是在源代码上)。

您是如何尝试获取这些信息的,您需要如何处理这些信息?最简单的方法可能是插入Java编译器。我必须在Java程序中找出使用了太多文本的类,作为项目的一部分来检测代码气味。你能解释一下如何使用编译器以编程方式实现这一点吗?编译器还用文本本身替换常量字段访问。你是如何试图获取这些信息的,你需要用它做什么?最简单的方法可能是插入Java编译器。我必须在Java程序中找出使用了太多文本的类,作为项目的一部分来检测代码气味。你能解释一下如何使用编译器以编程的方式实现这一点吗?编译器也用文本本身代替常量字段访问。谢谢你的快速回复,但很抱歉,我需要更多的帮助。使用您提供的链接中的eg,如果在源文件读取中我们有int i=9;在程序SimpleName=node.getName()中;this.names.add(name.getIdentifier());获取变量名(即“i”)。但是我怎么知道分配给变量的值是否是一个文本呢?当解析器分析“inti=9”时,它会将“9”作为一个文本添加到抽象解析树中。检查应用于遍历解析结果的ASTVisitor类。它有诸如“endVisit(Number Terral node)”之类的方法。为了说明这一点,我将对示例进行一些更新。感谢您的快速回复,但很抱歉,我需要更多的帮助。使用您提供的链接中的eg,如果在源文件读取中我们有int i=9;在程序SimpleName=node.getName()中;this.names.add(name.getIdentifier());获取变量名(即“i”)。但是我怎么知道分配给变量的值是否是一个文本呢?当解析器分析“inti=9”时,它会将“9”作为一个文本添加到抽象解析树中。检查应用于遍历解析结果的ASTVisitor类。它有诸如“endVisit(Number Terral node)”之类的方法。为了说明这一点,我将稍微更新这个示例。