Mar*_*aux 39 java string math parsing expression
Java中是否有一种方法可以从这个数学表达式中获得结果:
String code = "5+4*(7-15)";
另一方面,解析算术表达式的最佳方法是什么?
Nic*_*olt 33
您可以将它传递给BeanShell bsh.Interpreter,如下所示:
Interpreter interpreter = new Interpreter();
interpreter.eval("result = 5+4*(7-15)");
System.out.println(interpreter.get("result"));
您需要确保您评估的字符串来自可信来源和通常的预防措施,否则它将直接起作用.
如果你想要去的,你可以使用更复杂的(但更安全)的方法ANTLR(我怀疑有一个数学语法为起点)和实际编译/解释自己的发言.
fas*_*seg 30
我最近开发了一个表达式解析器,并在apache许可下发布了它.你可以在http://projects.congrace.de/exp4j/index.html上找到它
希望有所帮助
您可以使用ScriptEngine类并将其评估为javascript字符串
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");        
Object result = engine.eval("5+4*(7-15)");
确实,你应该知道javascript中以下指令的结果:
   eval('var aa=5+4*(7-15)')
   aa // -27
可能有更好的方法,但这个方法有效.
最近我正在使用非常成熟的开源数学表达式解析器库,为 JAVA 和 .NET 提供相同的 API。库名称是 mXparser。mXparser 提供基本功能(简单的公式解析和计算)和更高级的功能(即用户定义的参数、函数)。此外值得注意的是,mXparser 具有丰富的内置数学集合(即运算符、一元/二元/可变参数函数、迭代运算符,例如求和和乘积)。
https://mathparser.org/mxparser-tutorial/
请看下面的几个例子,以便更清楚地了解语法。
示例 1 - 简单公式
Expression e = new Expression("2+3");
double v = e.calculate();
示例 2 - 内置函数
Expression e = new Expression("2+sin(3)");
double v = e.calculate();
示例 3 - 内置常量
Expression e = new Expression("2+sin(pi)");
double v = e.calculate();
示例 4 - 用户定义的参数和常量
Argument x = new Argument("x = 5");
Constant a = new Constant("a = 2 + sin(3)");
Expression e = new Expression("a + x^2", x, a);
double v1 = e.calculate();
x.setArgumentValue(10);
double v2 = e.calculate();
示例 5 - 用户定义的函数
Function f = new Function("f(x,y) = x^2 + cos(y)");
Expression e = new Expression("f(10,pi) - 3", f);
double v = e.calculate();
示例 6 - 用户定义的递归
Function factorial = new Function("fact(n) = if( n > 0; n*fact(n-1); 1)");
Expression e = new Expression("fact(10) - 10!", factorial);
double v = e.calculate();
最近发现 - 如果您想尝试语法(并查看高级用例),您可以下载由 mXparser 提供支持的标量计算器 应用程序。
此致
力康
| 归档时间: | 
 | 
| 查看次数: | 82209 次 | 
| 最近记录: |