Java Boolean.parseboolean无法计算计算的布尔表达式

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

我试图解决一个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(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;i
Boolean.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