You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何将包含逻辑语句的字符串转换为Boolean类型并求值

你之前使用的Boolean.parseBoolean、Boolean.valueOf只能处理值为纯"true"或"false"的字符串,无法解析包含逻辑运算符的复杂表达式,两种常用实现方案如下:

方案1:使用JDK自带的ScriptEngine解析(无需引入第三方依赖)

先将字符串中的HTML转义符&还原为逻辑与运算符&,再调用脚本引擎执行表达式得到布尔结果,示例代码如下:

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class LogicExprEval {
    public static void main(String[] args) throws ScriptException {
        // 原表达式先替换转义的&
        String expr = "(true & false) | true".replace("&", "&");
        ScriptEngineManager manager = new ScriptEngineManager();
        ScriptEngine engine = manager.getEngineByName("JavaScript");
        // 执行表达式得到布尔结果
        Boolean result = (Boolean) engine.eval(expr);
        if (result) {
            System.out.println("the equation is true");
        } else {
            System.out.println("the equation is false");
        }
    }
}

注意:如果你的表达式来源不可信,这种方案存在脚本注入风险,建议使用第二种方案

方案2:自定义解析逻辑/使用轻量级表达式引擎(更安全)

如果要规避脚本注入风险,有两个可选方向:

  • 自己手写递归下降解析器,仅识别!、&、|、括号、true/false这几个有限的语法元素即可,逻辑复杂度不高,完全可控
  • 引入专门的表达式解析库,比如SpEL、Apache Commons JEXL,仅开放布尔逻辑相关的语法权限,避免恶意代码执行

SpEL实现示例:

import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;

public class SpelEval {
    public static void main(String[] args) {
        String expr = "(true & false) | true".replace("&", "&");
        ExpressionParser parser = new SpelExpressionParser();
        Boolean result = parser.parseExpression(expr).getValue(Boolean.class);
        System.out.println(result);
    }
}

内容的提问来源于stack exchange,提问作者Globhui

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 21:54:04