java中的表达式求值

java中的表达式求值,java,data-structures,Java,Data Structures,我在java中工作,我必须计算作为字符串给出的数学表达式。例如: “5*8-9/7+5-8” 将导致 35.71. 我尝试了“JavaEvalLibrary”,但没有找到任何帮助。请告诉我如何解决这类问题。 我可以使用数据结构栈或队列来评估这些表达式,但是我必须考虑运算符优先级,因为乘法是在减法、加法之前完成的。 记住时间复杂性,什么样的数据结构最适合这种情况。从Java 6开始,您可以使用内置的Javascript引擎 注意:eval()方法抛出一个ScriptException,您还需要以下

我在java中工作,我必须计算作为字符串给出的数学表达式。例如:

“5*8-9/7+5-8”

将导致

35.71.

我尝试了“JavaEvalLibrary”,但没有找到任何帮助。请告诉我如何解决这类问题。 我可以使用数据结构栈或队列来评估这些表达式,但是我必须考虑运算符优先级,因为乘法是在减法、加法之前完成的。
记住时间复杂性,什么样的数据结构最适合这种情况。

从Java 6开始,您可以使用内置的Javascript引擎

注意:
eval()
方法抛出一个
ScriptException
,您还需要以下导入

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

在Java6中,您可以使用内置的Javascript引擎

注意:
eval()
方法抛出一个
ScriptException
,您还需要以下导入

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

最简单的方法是使用Java脚本引擎。更具体地说,Ecma脚本(又名Javascript)支持,它是内置的,其语法与Java非常相似

您需要做的是使用您想要的任何方法检索字符串,并要求脚本引擎对该字符串求值

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class X {

    public static void main(String[] args) throws ScriptException {
        String calculation = "8 * 10 + 3";

        ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript");
        Object result = engine.eval(calculation);
        System.out.println(result);
    }

}

另一个选择是构建自己的DSL。为此,我推荐Antlr。这很难,但会解决您的问题。

最简单的方法是使用Java脚本引擎。更具体地说,Ecma脚本(又名Javascript)支持,它是内置的,其语法与Java非常相似

您需要做的是使用您想要的任何方法检索字符串,并要求脚本引擎对该字符串求值

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class X {

    public static void main(String[] args) throws ScriptException {
        String calculation = "8 * 10 + 3";

        ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript");
        Object result = engine.eval(calculation);
        System.out.println(result);
    }

}

另一个选择是构建自己的DSL。为此,我推荐Antlr。这很难,但会解决您的问题。

如果您不想运行javascript引擎来计算字符串数学表达式,那么其他人似乎也有同样的问题。也许这是另一种选择:


如果您不想为了计算字符串数学表达式的单一目的而运行javascript引擎,那么其他人似乎也有同样的问题。也许这是另一种选择:


您需要使用某种形式的脚本。如果需要使用某种形式的脚本,您可以在Java中调用脚本语言(例如javascript)。您可以在java中调用脚本语言(例如javascript)