我有一个如下所示的字符串:
String str = "4*5";
现在我必须使用字符串得到 20
的结果。
我知道在其他一些语言中 eval()
函数会执行此操作。我如何在 Java 中执行此操作?
原文由 karthi_ms 发布,翻译遵循 CC BY-SA 4.0 许可协议
我有一个如下所示的字符串:
String str = "4*5";
现在我必须使用字符串得到 20
的结果。
我知道在其他一些语言中 eval()
函数会执行此操作。我如何在 Java 中执行此操作?
原文由 karthi_ms 发布,翻译遵循 CC BY-SA 4.0 许可协议
没有标准的 Java 类或方法可以满足您的需求。您的选择包括:
用 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 许可协议
8 回答6.5k 阅读
4 回答687 阅读✓ 已解决
2 回答3.4k 阅读
3 回答1.9k 阅读✓ 已解决
1 回答2.1k 阅读✓ 已解决
1 回答2.1k 阅读✓ 已解决
1 回答961 阅读✓ 已解决
您可以使用
ScriptEngine
类并将其评估为 Javascript 字符串。可能有更好的方法,但这个方法有效。