java中的表达式评估

Ach*_*les 1 java data-structures

我在java工作,我必须评估作为String给出的数学表达式.例如:

"5*8-9/7+5-8"

会导致

35.71.

我试过"java eval库",但没有找到帮助.请告诉我如何解决这类问题.我可以使用数据结构堆栈或队列来评估这些表达式,但我必须考虑运算符优先级,因为乘法是在减法,加法之前完成的.哪种数据结构最适合这种情况,最好记住时间复杂性.

Sud*_*hul 6

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

ScriptEngineManager sem = new ScriptEngineManager();
ScriptEngine eng = sem.getEngineByName("JavaScript");
String str = "5*8-9/7+5-8";
System.out.println(eng.eval(str));
Run Code Online (Sandbox Code Playgroud)

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

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
Run Code Online (Sandbox Code Playgroud)