Java 中有 eval() 函数吗?

新手上路,请多包涵

我有一个如下所示的字符串:

 String str = "4*5";

现在我必须使用字符串得到 20 的结果。

我知道在其他一些语言中 eval() 函数会执行此操作。我如何在 Java 中执行此操作?

原文由 karthi_ms 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.3k
2 个回答

您可以使用 ScriptEngine 类并将其评估为 Javascript 字符串。

 ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");
Object result = engine.eval("4*5");

可能有更好的方法,但这个方法有效。

原文由 Jeff Storey 发布,翻译遵循 CC BY-SA 3.0 许可协议

没有标准的 Java 类或方法可以满足您的需求。您的选择包括:

  • 选择和使用一些第三方表达式评估库。例如 JEL此处 列出的六个库中的任何一个。

  • eval 方法包装 Java 源代码中的表达式,将其发送到 Java 编译器,然后加载生成的编译类。

  • 使用一些可以从 Java 调用的脚本语言作为表达式计算器。可能包括 Javascript 1 、BeanShell 等。可以通过 Scripting API 调用符合 JSR 223 的脚本语言实现。

  • 从头开始编写您自己的表达式评估器。

第一种方法可能是最简单的。如果您从不受信任的用户处获取要计算的表达式,则第二种和第三种方法存在潜在的安全风险。 (想想代码注入。)


1 - Java SE 中的 Javascript 是一个移动的目标。从 Java 6 开始,Mozilla 的 Rhino Javascript 实现版本与 Java SE 捆绑在一起。在 Java 8 中,它被 Nashorn 取代。在 Java 11 中,Nashorn 被弃用,并最终从核心代码库中删除。截至 2021 年,Rhino 和 Nashorn 都作为独立的(非 Oracle)产品进行维护,而 Oracle 的 GraalVM 拥有自己的 Javascript 实现。

原文由 Stephen C 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏