方案一,不需要引用任何包,使用java自带的方式
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import java.math.BigDecimal;
public class Main {
public static void main(String[] args) {
String expression = "(value.compareTo(a) > 0 && value.compareTo(b) < 0) || value.compareTo(c) == 0";
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");
try {
BigDecimal a = new BigDecimal("2.0"); // 设置a的值
BigDecimal b = new BigDecimal("4.0"); // 设置b的值
BigDecimal c = new BigDecimal("3.5"); // 设置c的值
BigDecimal value = new BigDecimal("3.5"); // 设置value的值
engine.put("a", a);
engine.put("b", b);
engine.put("c", c);
engine.put("value", value);
Object result = engine.eval(expression);
System.out.println("结果: " + result);
} catch (ScriptException e) {
e.printStackTrace();
}
}
}
方案一,使用阿里的包
第一步 pom引入该包
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>QLExpress</artifactId>
<version>3.3.1</version>
</dependency>
第二步
import com.ql.util.express.DefaultContext;
import com.ql.util.express.ExpressRunner;
public class Main {
public static void main(String[] args) {
String expression = "(value.compareTo(a) > 0 && value.compareTo(b) < 0) || value.compareTo(c) == 0";
ExpressRunner runner = new ExpressRunner();
DefaultContext<String, Object> context = new DefaultContext<String, Object>();
try {
context.put("a", new BigDecimal("2.0"));
context.put("b", new BigDecimal("4.0"));
context.put("c", new BigDecimal("3.5"));
context.put("value", new BigDecimal("3.5"));
//isCache:表示是否使用Cache中的指令集。如果设为true,
//则会尝试从缓存中获取已经编译好的表达式,以提高执行效率。
//isTrace:表示是否输出详细的执行指令信息。如果设为true,
//会输出详细的执行指令信息,用于调试目的。
Object result = runner.execute(expression, context, null, true, false);
System.out.println("结果: " + result);
} catch (Exception e) {
e.printStackTrace();
}
}
}