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());
我想在 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());