如何将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");
我有一个布尔函数字符串。我想用布尔值计算它的值。 在 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");