我想将String转换为boolean,但是Output始终为false。
a=true;
b=true;
c=true;
String zOrginal="(a^b)|c";
boolean z= Boolean.parseBoolean(zOrginal);
out.println(z);
输出始终为假,
答案 0 :(得分:3)
这是Boolean.parseBoolean
的源代码:
public static boolean parseBoolean(String b)
{
return "true".equalsIgnoreCase(b) ? true : false;
}
此函数唯一返回true
的情况是传递给它的字符串是“ true”(尽管有大小写)。
如果要检查字符串是否为非空,请使用String.isEmpty
方法。如果您实际上想“评估”字符串,那并不是那么简单...但是您可能希望通读Is there an eval() function in Java?。
答案 1 :(得分:3)
您应该直接在字符串中不对表达式求值。
boolean a,b,c;
a=true;
b=true;
c=true;
boolean z= (a^b)|c;
System.out.println(z);
答案 2 :(得分:3)
在Java中,parseBoolean
方法将字符串参数解析为布尔值。如果字符串参数不为null且忽略大小写,等于字符串“true”
,则返回的布尔值表示true。
因此,如果您解析"(a^b)|c"
,则会得到false
,因为它不会计算表达式。
答案 3 :(得分:1)
如果您要计算表达式"(a^b)|c"
的结果,其中a
,b
和c
是上面定义的变量,只需直接以Java执行表达式即可其他答案中所述的代码。
boolean result = (a|b)^c;
但是,如果您真的想对来自String
的表达式求值,例如说该字符串来自用户输入,则有一个名为JExl的库可让您执行此操作:
http://commons.apache.org/proper/commons-jexl/
将以下行添加到您的行家pom.xml
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-jexl3</artifactId>
<version>3.1</version>
</dependency>
还没有测试下面的代码,但是您可以尝试一下。
import org.apache.commons.jexl3.*;
JexlEngine jexl = new JexlBuilder().create();
String expression = "(a|b)^c";
JexlExpression jExpression = jexl.createExpression(expression);
// JexlContext stores the values for variables used in an JexlExpression
JexlContext context = new MapContext();
context.set("a", true);
context.set("b", true);
context.set("c", true);
// evaluate expression.
Long result = (Long) jExpression.evaluate(context);
System.out.println(result); // 0 for false
当然,与直接执行代码相比,性能会更差,因为表达式必须先解析成抽象语法树(AST),然后才能对其求值。
答案 4 :(得分:0)
有多种将字符串转换为布尔值的方法:
使用 Boolean.valueOf(StringVal)方法:
public class Test {
public static void main(String[] args) {
String val = "false";
boolean result=Boolean.valueOf(val);
System.out.println(result);
}
}
在这种情况下,仅当字符串为“ true”时返回true,否则返回false。
您可以创建自己的方法来检查字符串值,并可以基于该值返回true或false。
public class Test {
public static void main(String[] args) {
String val = "true";
boolean result=getBoolean(val);
System.out.println(result);
}
public static boolean getBoolean(String value)
{
return "true".equalsIgnoreCase(value) ? true : false;
}
}