java实现逻辑表达式的字符串转为boolean(针对bigdecimal类型处理)

方案一,不需要引用任何包,使用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();
        }
    }
}

你可能感兴趣的:(java,python,开发语言)