Java Boolean.parseboolean无法计算计算的布尔表达式
我试图解决一个java程序,在这个程序中,我们必须计算一个字符串表达式并返回true或false。表达式可能是这样的s=(F&F | V |!V&!F&!(F | F&V))其中V表示真,F表示假。我认为用V代替true,用F代替false是可行的。但是输出不符合要求,如果我错了,请告诉我 我的代码是这样的Java Boolean.parseboolean无法计算计算的布尔表达式,java,string,boolean,Java,String,Boolean,我试图解决一个java程序,在这个程序中,我们必须计算一个字符串表达式并返回true或false。表达式可能是这样的s=(F&F | V |!V&!F&!(F | F&V))其中V表示真,F表示假。我认为用V代替true,用F代替false是可行的。但是输出不符合要求,如果我错了,请告诉我 我的代码是这样的 String temp=""; for(int i=0;i<s.length();i++) { char ch=s.charAt(i); if
String temp="";
for(int i=0;i<s.length();i++)
{
char ch=s.charAt(i);
if(ch=='V')
{
temp+="true";
continue;
}
else if(ch=='F')
{
temp+="false";
continue;
}
else
{
temp+=ch;
continue;
}
}
boolean t=Boolean.parseBoolean(temp);
out.println(temp);
out.println(t);
return t;
String temp=”“;
对于(int i=0;iBoolean.parseBoolean
相当于“true”.equalsIgnoreCase
;它不计算逻辑表达式。相反,您可以使用JavaScript引擎
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
//...
try {
String s = "(F&F|V|!V&!F&!(F|F&V))";
ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript");
boolean b = Boolean.parseBoolean(engine.eval(s.replace("F", "false")
.replace("V", "true").replace("&", "&&").replace("|", "||")).toString());
System.out.println(b);
} catch(ScriptException e){
// Handle
e.printStackTrace();
}
试试这个
static boolean evalBooleanExpression(String s) {
return new Object() {
int index = 0;
int ch = get();
int get() { return ch = index < s.length() ? s.charAt(index++) : -1; }
boolean eat(int ex) {
while (Character.isWhitespace(ch))
get();
if (ch != ex) return false;
get();
return true;
}
boolean paren() {
boolean r = expression();
if (!eat(')')) throw new RuntimeException("')' expected");
return r;
}
boolean factor() {
boolean not = false;
if (eat('!')) not = true;
if (eat('V')) return !not;
else if (eat('F')) return not;
else if (eat('(')) return not ^ paren();
else throw new RuntimeException("unknown char '" + ((char)ch) + "'");
}
boolean term() {
boolean r = factor();
while (eat('&'))
r &= factor();
return r;
}
boolean expression() {
boolean r = term();
while (eat('|'))
r |= term();
return r;
}
boolean parse() {
boolean r = expression();
if (ch != -1)
throw new RuntimeException(
"extra string '" + s.substring(index - 1) + "'");
return r;
}
}.parse();
}
输出:
true
假设这是一个家庭作业,我希望一个可接受的解决方案需要实际解析表达式以对其进行求值,而不仅仅是将其输入其他编译器。是的,但你能告诉我java中的另一种选择吗……我是js新手,不知道如何使用引擎。解析转换或编译器e有问题吗评估布尔表达式?@samcodes007我的答案显示了如何在Java中使用JavaScript引擎。它还解释了为什么boolean.parseBoolean
不起作用。@samcodes007您可以在这里看到这个工作的演示:您可以等效地编写一个Java程序,它发出一个Java程序boolean F=false,V=true,s=(F&F | V |!V&!F&!(F | F&V));println(s)
——当然是用通常的样板文件包装——并将其输入Java编译器。但这似乎避免了这个问题。强烈建议:阅读文档,即的javadoc,以了解该方法的实际功能。是的,这很有帮助……谢谢!
true