首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用java进行表达式计算

用java进行表达式计算
EN

Stack Overflow用户
提问于 2013-11-12 10:34:24
回答 3查看 3.4K关注 0票数 1

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

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

会导致

35.71.

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-12 10:37:00

在Java 6中,您可以使用内置Javascript引擎。

代码语言:javascript
运行
复制
ScriptEngineManager sem = new ScriptEngineManager();
ScriptEngine eng = sem.getEngineByName("JavaScript");
String str = "5*8-9/7+5-8";
System.out.println(eng.eval(str));

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

代码语言:javascript
运行
复制
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
票数 6
EN

Stack Overflow用户

发布于 2013-11-12 10:42:15

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

您需要做的是使用您想要的任何方法检索您的字符串,并要求脚本引擎计算这个字符串。

代码语言:javascript
运行
复制
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。为此我推荐安特尔。这样做很难,但会解决你的问题。

票数 2
EN

Stack Overflow用户

发布于 2013-11-12 10:56:43

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

http://jeval.sourceforge.net/docs/api/net/sourceforge/jeval/Evaluator.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19926777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档