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

如何检查给定的代码行是否用java编写?

晏弘雅
2023-03-14

检查给定行是否为java代码的正确方法是什么?

输入:日志支持。java:44 com/sun/activation/registries/LogSupport日志(Ljava/lang/String;)五、

预期输出:false。

输入:扫描仪输入=新扫描仪(系统输入);

预期输出:true。

我尝试了EclipseJDTASTParser来检查是否可以创建AST。代码如下:

public static boolean isJava(String line) {
    boolean isJava = false;
    ASTParser parser = ASTParser.newParser(AST.JLS3);
    parser.setSource(line.toCharArray());
    parser.setResolveBindings(false);
    ASTNode node = null;

    parser.setKind(ASTParser.K_STATEMENTS);
    try {
        node = parser.createAST(null);
        if (node == null) return false;
        isJava = true;
    } catch (Exception e) {
        return false;
    }
    return isJava;
}

但这是行不通的。有什么想法吗?谢谢

共有2个答案

强安和
2023-03-14

显然,您需要确定您拥有的字符串是否是Java语言的有效子串。

显然,要做到这一点,需要一个完整的java解析器作为基础。某些解析机制可能允许您尝试将字符串解析为语言中的非终结符;使用递归下降解析器相对容易做到这一点。(根据OP的例子,Eclipse解析似乎提供了这一点)。

但是如果你想接受一个子串(例如,

        57).x=2; foo[15].bar(abc>=

是一个有效的Java片段,您需要专门的解析机器来处理它。

我们的DMS软件再工程工具包及其Java前端将实现这一点。解析器API提供了“解析完整编译单元”、“解析非终结符”和“解析子字符串”的工具。前两棵回归树;后者返回一系列树。它不是一个任意的子字符串;不能在令牌的中间开始或结束(例如,字符串文字)。除此之外,它将解析任意子字符串。

刘骏祥
2023-03-14

试试豆壳

http://www.beanshell.org/intro.html

Java评价特点:

动态评估完整的Java源类以及独立的Java方法、语句和表达式。

特色摘要

动态执行完整的Java语法、Java代码片段以及松散类型的Java和其他脚本编写便利。

透明地访问所有Java对象和API。

以四种模式运行:命令行、控制台、小程序、远程会话服务器。可以在安全受限的环境中工作,而无需为大多数功能生成类加载器或字节码。

解释器是一个小的~150K jar文件。

纯粹的Java。

它是免费的!!

下面的链接有一些其他选项,您可以尝试

语法检查Java

 类似资料:
  • 问题内容: 我发现这个问题可以解决C ++问题: 如何在gcc中从C / C ++源代码获得汇编程序输出? 问题答案: Java使用字节码。最相似的是,每个链接的Oracle文档, 该 javap的 命令拆卸一个或多个类文件。其输出取决于所使用的选项。 如果我将其编译为然后运行,我会得到

  • 本文向大家介绍检查Java ArrayList是否包含给定项,包括了检查Java ArrayList是否包含给定项的使用技巧和注意事项,需要的朋友参考一下 java.util.ArrayList.contains()方法可用于检查Java ArrayList是否包含给定项。此方法具有单个参数,即测试了其在ArrayList中是否存在的项目。如果该项目在ArrayList中存在,则返回true;如果

  • 问题内容: 好吧,这是一个复杂的问题,我完全迷失了。 假设您有一个字符串和一个通用类。像这样。 您将如何检查String是否表示该类可以相等的值。 例如,可以这样说: 如何检查字符串“ true”实际上是布尔值? 这是另一个例子。可以这样说: 如何检查字符串“ true”不是整数? 问题答案: 鉴于您只需要 Wrapper Types ,可以在此处使用一些反射技巧(为简洁起见,忽略无关代码的异常处

  • 问题内容: 下面的代码不适用于某些输入。 我最初的想法是检查每个输入是否为2的幂,方法是从1开始乘以2直到超过输入数量,然后在每个步骤进行比较。相反,我预先存储了2的所有幂,以便检查中的给定输入。如何改善呢? 问题答案: 将 _ 最好的,最准确_ 的方法是使用位操作: 说明: 2的每个幂将1位恰好设置为1(该数的对数以2为底的索引中的位)。因此,当从中减去1时,该位​​翻转为0,而所有在前位翻转为

  • 我试图检查一个给定的二叉树是否是二叉查找树。我要做的是对二叉树进行有序遍历,并将当前元素与前一个元素进行比较。如果当前元素更大,我们继续进一步检查,否则给定的树是无效的。 这是我写的代码。我到底做错了什么?

  • 问题内容: 我试图找到给定的路径是否可能是使用java的另一个路径的子级。这两个路径可能不存在。 说是可能的孩子。 目前,我正在与 问题答案: 您还可以使用 java.nio.file.Path 轻松完成此操作。该 java.nio.file.Path.startsWith 方法似乎是处理所有可能的情况。 例: 输出 如果需要更高的可靠性,可以使用“ toRealPath”代替“ toAbsolu