以编程方式查找java类中的文本
我发现Java文本是布尔、字符、数字或字符串数据的语法表示 我的问题是如何以编程方式在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代码解析器,比如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)”之类的方法。为了说明这一点,我将稍微更新这个示例。