【问题标题】:how to convert String to boolean in java?如何在java中将字符串转换为布尔值?
【发布时间】:2018-12-02 19:50:43
【问题描述】:

我想将字符串转换为布尔值,但输出总是假的。

a=true;
b=true;
c=true;
String zOrginal="(a^b)|c";
boolean z= Boolean.parseBoolean(zOrginal);
out.println(z);

输出总是假的,

【问题讨论】:

  • 无论大小写如何,字符串都必须等于“true”
  • 也许你想检查长度?
  • 不可能像那样计算逻辑表达式

标签: java string jsp type-conversion boolean


【解决方案1】:

这是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?

【讨论】:

    【解决方案2】:

    如果要计算表达式"(a^b)|c" 的结果,其中abc 是上面定义的变量,只需按照其他答案中的说明将表达式直接作为java 代码执行即可。

    boolean result = (a|b)^c;
    

    但是,如果真的想计算来自 String 的表达式,比如当字符串来自用户输入时,那么有一个名为 JExl 的库可以让你这样做:

    http://commons.apache.org/proper/commons-jexl/

    将以下行添加到您的 maven 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),然后才能对其进行求值。

    【讨论】:

    • JexlEngine、JexlBuilder、JexlExpression、JexlContext 和 MapContext 无法解析为类型。请帮助
    • 您是否尝试将 Jexl 库添加到您的依赖项中?不确定您使用的是哪个 java 构建工具(Gradle、Maven 等),但请查看 Jexl 的 maven 存储库:Link。还需要添加 import 我已经编辑了我的代码的语句
    • 我使用 Eclipse。运行后报错,“JexlEngine jexl = new JexlBuilder().create();”
    • 您是否在项目目录的任何位置看到名为pom.xmlbuild.gradle 的文件?
    • 你需要将jexl库添加到pom.xmlbuild.gradle文件中的依赖项中。
    【解决方案3】:

    有多种方法可以将字符串转换为布尔值:

    1. 使用 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。

    2. 您可以创建自己的方法来检查字符串值,并可以根据它返回真或假。

      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;
         }
      }
      

    【讨论】:

      【解决方案4】:

      在 Java 中,parseBoolean 方法将字符串参数解析为布尔值。返回的布尔值表示如果字符串参数不为空且等于字符串“true”(忽略大小写),则返回值 true。

      因此,如果您解析 "(a^b)|c",您将得到 false,因为它不会评估表达式。

      【讨论】:

      • TextBox 中的客户端输入,我无法获取布尔值的客户端输入
      【解决方案5】:

      您应该直接评估表达式,而不是在字符串中。

      boolean a,b,c;
      a=true;
      b=true;
      c=true;
      boolean z= (a^b)|c;
      System.out.println(z);
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-23
      • 2014-11-21
      • 2011-02-17
      • 2012-04-02
      • 2021-02-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多