Java 中是否有 eval() 函数?
我有一个如下所示的字符串:
String str = "4*5";
现在我必须通过使用字符串来获取的结果。20
我知道在其他一些语言中,该函数将执行此操作。如何在Java中执行此操作?eval()
我有一个如下所示的字符串:
String str = "4*5";
现在我必须通过使用字符串来获取的结果。20
我知道在其他一些语言中,该函数将执行此操作。如何在Java中执行此操作?eval()
您可以使用 ScriptEngine
类并将其作为 Javascript 字符串进行评估。
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");
Object result = engine.eval("4*5");
可能有更好的方法,但这种方法有效。
没有标准的Java类或方法可以做你想做的事。您的选项包括:
将表达式包装在具有方法的类的 Java 源代码中,将其发送到 Java 编译器,然后加载生成的已编译类。eval
使用一些可以从 Java 调用的脚本语言作为表达式计算器。可能性包括Javascript1,BeanShell等。符合 JSR 223 的脚本语言实现可以通过脚本 API 调用。
从头开始编写自己的表达式计算器。
第一种方法可能是最简单的。第二种和第三种方法存在潜在的安全风险,如果您从不受信任的用户处获取要计算的表达式。(想想代码注入。
1 - Java SE中的Javascript是一个移动的目标。从Java 6开始,Mozilla的Rhino Javascript实现的一个版本与Java SE捆绑在一起。在Java 8中,它被Nashorn取代。在Java 11中,Nashorn被弃用,最后从核心代码库中删除。截至2021年,Rhino和Nashorn都作为单独的(非Oracle)产品进行维护,Oracle的GraalVM有自己的Javascript实现。