【问题标题】:Formula expression to result [duplicate]结果的公式表达式[重复]
【发布时间】:2011-08-27 00:56:00
【问题描述】:

在 Java 中,如果我有一个字符串:

String abc = "(5)*(2+2)/(2)";

我怎样才能得到abc = 10的结果?

【问题讨论】:

  • @Touko:这个问题仅限于 JVM 1.5 解决方案。

标签: java


【解决方案1】:
import javax.script.*;
public class EvalScript {
    public static void main(String[] args) throws Exception {
        // create a script engine manager
        ScriptEngineManager factory = new ScriptEngineManager();
        // create a JavaScript engine
        ScriptEngine engine = factory.getEngineByName("JavaScript");
        // evaluate JavaScript code from String
        Number number = (Number)engine.eval("(5)*(2+2)/(2)");
        System.out.println("abc = " + number);
    }
}

【讨论】:

  • 不应该更像Number number = (Number)engine.eval("(5)*(2+2)/(2)");而不是使用print语句吗?
  • 很好的解决方案,顺便说一句,这仅适用于 Java 6.0 及更高版本。
  • 这是一个糟糕的解决方案。就一般安全而言,这是有风险的。有许多事件使用广泛开放的评估工具来破坏系统。恶意黑客看到这种代码,高兴得跳了起来。它对命令注入非常开放。
  • 并非所有软件都是公开发布的。对于快速原型制作,这可能是一个完美的应用程序。
【解决方案2】:

这并不简单。你应该

  • 拥有算术表达式的语法
  • 从语法构建词法分析器/解析器
  • 使用解析器解析字符串,并让解析器执行与语法的算术运算符相对应的语义操作。

您可以在ANTLR documentation 中找到一个简单的示例:第 2.1 节创建一个简单的语法,有一个带有基本算术表达式语法的 Java 示例。

【讨论】:

猜你喜欢
  • 2019-10-20
  • 1970-01-01
  • 1970-01-01
  • 2020-07-07
  • 2021-12-07
  • 2019-07-11
  • 2014-05-06
  • 2020-05-03
  • 2019-10-19
相关资源
最近更新 更多