我试图写一个Java例程来计算数学表达式从字符串值,如:
"5 + 3" "10-4 * 5" "(1 + 10) * 3"
我想避免很多如果-then-else语句。 我该怎么做呢?
我试图写一个Java例程来计算数学表达式从字符串值,如:
"5 + 3" "10-4 * 5" "(1 + 10) * 3"
我想避免很多如果-then-else语句。 我该怎么做呢?
当前回答
我已经使用迭代解析和分流码算法,我真的很喜欢开发表达式求值器,你可以在这里找到所有的代码
https://github.com/nagaraj200788/JavaExpressionEvaluator
有73个测试用例,甚至工作于大整数,大小数
支持所有关系,算术表达式和两者的组合。 甚至支持三元运算符。
增加了增强,以支持有符号的数字,如-100+89,这是有趣的,详细信息请检查TokenReader.isUnaryOperator()方法,我已经更新了上面链接中的代码
其他回答
看来应该由JEP来做这项工作
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
public class test2 {
public static void main(String[] args) throws ScriptException {
String s = "10+2";
ScriptEngineManager mn = new ScriptEngineManager();
ScriptEngine en = mn.getEngineByName("js");
Object result = en.eval(s);
System.out.println(result);
}
}
import java.util.*;
public class check {
int ans;
String str="7 + 5";
StringTokenizer st=new StringTokenizer(str);
int v1=Integer.parseInt(st.nextToken());
String op=st.nextToken();
int v2=Integer.parseInt(st.nextToken());
if(op.equals("+")) { ans= v1 + v2; }
if(op.equals("-")) { ans= v1 - v2; }
//.........
}
这是另一个有趣的选择 https://github.com/Shy-Ta/expression-evaluator-demo
它的用法非常简单,可以完成工作,例如:
ExpressionsEvaluator evalExpr = ExpressionsFactory.create("2+3*4-6/2");
assertEquals(BigDecimal.valueOf(11), evalExpr.eval());
现在回答已经太晚了,但我也遇到过同样的情况,在java中计算表达式,这可能会帮助到一些人
MVEL对表达式进行运行时求值,我们可以在String中编写java代码来得到它的值。
String expressionStr = "x+y";
Map<String, Object> vars = new HashMap<String, Object>();
vars.put("x", 10);
vars.put("y", 20);
ExecutableStatement statement = (ExecutableStatement) MVEL.compileExpression(expressionStr);
Object result = MVEL.executeExpression(statement, vars);