检查给定行是否为java代码的正确方法是什么?
输入:LogSupport.java:44 com / sun / activation / registries / LogSupport日志(Ljava / lang / String;)V
预期输出:false。
输入:扫描仪输入=新扫描仪(System.in);
预期输出:true。
我尝试了Eclipse JDT ASTParser来检查我们是否可以创建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;
}
但这不起作用。有任何想法吗?谢谢!
答案 0 :(得分:4)
尝试Beanshell
http://www.beanshell.org/intro.html
Java评估功能:
动态评估完整的Java源类以及隔离的Java方法,语句和表达式。
功能摘要
动态执行完整的Java语法,Java代码片段,以及松散类型的Java和其他脚本编写方便。
透明访问所有Java对象和API。
以四种模式运行:命令行,控制台,小程序,远程会话服务器。 可以在安全受限的环境中工作,而无需为大多数功能生成类加载器或字节码。
解释器是小~150K jar文件。
Pure Java。
免费!!
以下链接还有其他一些您可以尝试的选项
答案 1 :(得分:1)
你想要的是确定你拥有的字符串是否是Java语言的有效子字符串。
显然,要做到这一点,您需要一个完整的Java解析器作为基础。 一些解析机制可能会让你尝试将字符串解析为语言中的非终结符号;使用递归下降解析器相对容易。 (根据OP的例子,Eclipse解析似乎提供了这一点。)
但是如果你想接受一个子串(例如,
57).x=2; foo[15].bar(abc>=
是一个有效的Java片段,您需要解析专门用于处理此问题的机制。
我们的DMS Software Reengineering Toolkit及其Java Front End会执行此操作。解析器API 提供“解析完整的编译单元”,“解析非终结符号”和“解析子字符串”的工具。前两个返回树;后者返回一系列树木。它不是一个任意的子串;你不能在令牌中间开始或结束(例如,字符串文字)。除此之外,它将解析任意子串。