如何将Java中包含零和一的字符串更改为布尔函数?

How to change the String containing zero and one to boolean function in Java?

我有一个布尔函数字符串。我想用布尔值计算它的值。 在 Java?

中是否有任何功能可以做到这一点?

我有字符串str = "0+1+!(0+1+1)+1*0+!1";

我想要这个: 布尔值 result = false || true || !(false || true || true) || true && false || !true;

我使用条件对长度为 4 个元素的字符串进行了处理,但我必须将其应用于包含超过 20 个元素的字符串。

不可能计算出所有的组合。 你觉得我应该怎么做?

您可以使用脚本引擎:

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

public class Main {

    public static void main(String[] args) throws ScriptException {

        ScriptEngineManager manager=new ScriptEngineManager();
        ScriptEngine engine=manager.getEngineByName("js");

        String in="0+1+!(0+1+1)+1*0+!1";
        in=in.replaceAll("0", "false");
        in=in.replaceAll("1", "true");
        in=in.replaceAll("\+", "||");
        in=in.replaceAll("\*", "&&");
        //System.out.println(in);

        Boolean result = Boolean.valueOf(engine.eval(in).toString());
        System.out.println(result);
    
    }
}

更新。 以前的代码适用于 Java 版本 8 到 14。对于新版本,您可以添加下一个依赖项:

<dependency>
    <groupId>org.graalvm.js</groupId>
    <artifactId>js-scriptengine</artifactId>
    <version>22.1.0</version>
</dependency>
<dependency>
    <groupId>org.graalvm.js</groupId>
    <artifactId>js</artifactId>
    <version>22.1.0</version>
</dependency>

并更改代码:

    ScriptEngineManager manager=new ScriptEngineManager();  
    ScriptEngine engine=manager.getEngineByName("graal.js");