Java 计算结果的公式表达式

Java 计算结果的公式表达式,java,Java,在Java中,如果我有一个字符串: String abc = "(5)*(2+2)/(2)"; 我怎样才能得到abc=10的结果呢?这并不简单。你应该 import javax.script.*; public class EvalScript { public static void main(String[] args) throws Exception { // create a script engine manager ScriptEngine

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

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

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

这并不简单。你应该

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);
    }
}
  • 有算术表达式的语法
  • 根据语法构建词法分析器/解析器
  • 使用解析器解析字符串,并让解析器执行与语法算术运算符对应的语义操作

您可以在下面的章节中找到一个简单的例子:第2.1节创建一个简单语法,有一个Java示例,其中包含一个基本算术表达式的语法。

它不应该更像
Number Number=(Number)engine.eval(“(5)*(2+2)/(2)”
而不是使用
print
语句?这是一个很好的解决方案,而且只适用于Java 6.0以后的版本。这是一个糟糕的解决方案。这对一般安全来说是有风险的。在许多事件中,使用广泛开放的评估工具来破坏系统。恶意黑客看到这类代码后会高兴得跳起来。它对命令注入非常开放。并不是所有的软件都是以开放的方式发布的。对于快速原型,这可能是一个完美的应用程序。@Touko:这个问题仅限于JVM1.5解决方案。我同意。基于任何评估机制的技术通常容易受到注入攻击。参考文献:。为这项工作构建的商业工具的一个例子是formula4j.com。