条件字符串解析器在Java API中?

我想解决以下condtion字符串。 因为我想在我的项目中支持动态条件。

a != 0 && b > 5 

我的预期计划是

 public boolean resolve() { String condition = "a != 0 && b > 5"; Map paramMap = new HashMap; paramMap.put("a", 2); paramMap.put("b", 6); boolean result = ConditionResolver.resolve(condition, paramMap); if(result) { //do something } } 

更新:

我不是要解决数学等式,如下所示

 ((a + b) * y) /x 

从java 1.6开始,如果这对你来说足够和/或你不想引入另一个库,你可以使用ScriptEngine并评估javascript

 ScriptEngine scriptEngine = new ScriptEngineManager().getEngineByName("javascript"); SimpleBindings bindings = new SimpleBindings(); bindings.put("a", 0); bindings.put("b", 6); boolean firstEval = (Boolean) scriptEngine.eval("a != 0 && b > 5", bindings); System.out.println(firstEval); bindings.put("a", 2); bindings.put("b", 6); boolean secondEval = (Boolean) scriptEngine.eval("a != 0 && b > 5", bindings); System.out.println(secondEval); 

产量

 false true 

我认为你应该使用表达式库。可能这篇文章将帮助你在Java中评估数学表达式的内置方法

有关评估逻辑表达式,请参阅以下库: JANINO

 import java.lang.reflect.InvocationTargetException; import org.codehaus.commons.compiler.CompileException; import org.codehaus.janino.ExpressionEvaluator; public class WorkSheet_1{ public static void main(String[] args) throws CompileException, InvocationTargetException { ExpressionEvaluator ee = new ExpressionEvaluator( "a != 0 && b > 5", boolean.class, new String[] { "a", "b" }, new Class[] { int.class, int.class } ); Boolean res1 = (Boolean) ee.evaluate(new Object[] {new Integer(2), new Integer(6),}); System.out.println("res1 = " + res1); Boolean res2 = (Boolean) ee.evaluate(new Object[] {new Integer(2), new Integer(5),}); System.out.println("res2 = " + res2); } } 

OUTPUT

 res1 = true res2 = false