Java 算术方程字符串 java min(x,y),max(x,y),+,-,/,*

Java Arithmetic equation string java min(x,y),max(x,y),+,-,/,*

我想在 Java 中创建一个接收字符串方程式的方法, 例如:“3+2”或“32-1/3”甚至 "min(32,21)" returns 结果 我发现 ScriptEngine 提供了简单操作的解决方案:

ScriptEngineManager mgr = new ScriptEngineManager();
 ScriptEngine engine = mgr.getEngineByName("JavaScript");
 java.lang.String result;
 result = engine.eval(equation).toString();

但它没有 min(),max() 功能,而且它不安全,因为你可以通过它输入恶意脚本。

来自@kshetline 的评论应该可以解决您关于算术表达式问题的问题;至于安全性,我能想到的就是使用一些框架进行输入清理,或者编写自己的实现。

查看 How best to sanitize input in Java webapp.

希望对您有所帮助。

我找到了一个很棒的库,我只提供了一个字符串数学方程式,它解决了它并提供了许多其他功能。

它被 Mariusz Gromada 称为 mxParser。

import  org.mariuszgromada.math.mxparser.*;
import  org.mariuszgromada.math.mxparser.Constant;

  Constant mp = new Constant("mp",0.5);
        String mpString = Double.toString(mp.getConstantValue());
        String equation = "min(max(1,6)," + mpString +")";
        Expression e = new Expression(equation);
        System.out.println(e.calculate());