【问题标题】:How to convert String object to Boolean Object?如何将字符串对象转换为布尔对象?
【发布时间】:2010-12-05 01:20:58
【问题描述】:

如何将String对象转换为Boolean对象?

【问题讨论】:

  • 字符串的值是多少?
  • 您对如何将字符串转换为布尔值有什么期望?
  • myvartypeboolean = !!valuetoconvert

标签: java string boolean


【解决方案1】:

尝试(取决于您想要的结果类型):

Boolean boolean1 = Boolean.valueOf("true");
boolean boolean2 = Boolean.parseBoolean("true");

优势:

  • Boolean:这不会创建新的 Boolean 实例,因此性能更好(并且垃圾收集更少)。它重用了Boolean.TRUEBoolean.FALSE 的两个实例。
  • boolean:不需要实例,使用原始类型。

官方文档在Javadoc


更新:

也可以使用自动装箱,但会降低性能。
我建议仅在您必须自己施放时才使用它,而不是在施放可以避免时使用。

【讨论】:

  • 无论如何都不会将 Boolean.valueOf 分配给 boolaen2 吗?我在这里没有看到 parseBoolean 的区别。
  • 最大的问题是Boolean在看到不应该接受的东西时不会异常输出。它会为它认为“真”的任何东西返回真,而为其他所有东西返回假。如果您尝试强制将字符串与适当的布尔值匹配,则必须添加额外的逻辑来手动捕获非法情况。
  • 如果我使用boolean boolean2 = Boolean.valueOf("true");会怎样
  • 如果 String 对象为 null 则 Boolean.valueOf(String) 将返回 false 。但 Boolean 也可以保存 null 值。您可以为此提供任何帮助吗?
  • 因为这是最佳答案,您能否更新它以警告人们不要使用这些危险的方法? (不幸的是,我不知道公共库中有什么好的实现。)
【解决方案2】:

在使用 Boolean.valueOf(string)Boolean.parseBoolean(string) 时必须小心。这样做的原因是,如果 String 不等于“true”(忽略大小写),方法将始终返回 false。

例如:

Boolean.valueOf("YES") -> false

由于这种行为,我建议添加一些机制来确保应转换为布尔值的字符串遵循指定的格式。

例如:

if (string.equalsIgnoreCase("true") || string.equalsIgnoreCase("false")) {
    Boolean.valueOf(string)
    // do something   
} else {
    // throw some exception
}

【讨论】:

  • 这是我见过的最好的例子,应该从布尔类型开始。为无效的布尔值抛出异常对于许多应用程序都很重要。
  • 不,这并不完全正确。这是 parseBoolean public static boolean parseBoolean(String s) { return ((s != null) && s.equalsIgnoreCase("true")); 的底层实现。 }
  • 呵呵...如果你需要写这样的代码,那么你不需要调用Boolean.valueOf。相反,您可以简单地重组这个 if 语句,这样它就会做你想做的事;-)
【解决方案3】:
Boolean b = Boolean.valueOf(string);

如果字符串不为空且等于true(忽略大小写),则b 的值为真。

【讨论】:

    【解决方案4】:

    除了 KLE 的出色回答,我们还可以做一些更灵活的事情:

    boolean b = string.equalsIgnoreCase("true") || string.equalsIgnoreCase("t") || 
            string.equalsIgnoreCase("yes") || string.equalsIgnoreCase("y") || 
            string.equalsIgnoreCase("sure") || string.equalsIgnoreCase("aye") || 
            string.equalsIgnoreCase("oui") || string.equalsIgnoreCase("vrai");
    

    (受 zlajo 的回答启发... :-))

    【讨论】:

      【解决方案5】:
      boolean b = string.equalsIgnoreCase("true");
      

      【讨论】:

        【解决方案6】:

        嗯,就像现在在 2018 年 1 月一样,最好的方法是使用 apache 的 BooleanUtils.toBoolean

        这会将任何类似布尔值的字符串转换为布尔值,例如Y、是、真、N、否、假等

        真的很方便!

        【讨论】:

          【解决方案7】:

          使用Apache Commons library BooleanUtils class

          String[] values= new String[]{"y","Y","n","N","Yes","YES","yes","no","No","NO","true","false","True","False","TRUE","FALSE",null};
          for(String booleanStr : values){
              System.out.println("Str ="+ booleanStr +": boolean =" +BooleanUtils.toBoolean(booleanStr));
          }
          

          结果:

          Str =N: boolean =false
          Str =Yes: boolean =true
          Str =YES: boolean =true
          Str =yes: boolean =true
          Str =no: boolean =false
          Str =No: boolean =false
          Str =NO: boolean =false
          Str =true: boolean =true
          Str =false: boolean =false
          Str =True: boolean =true
          Str =False: boolean =false
          Str =TRUE: boolean =true
          Str =FALSE: boolean =false
          Str =null: boolean =false
          

          【讨论】:

          • 什么是 BooleanUtils?
          • org.apache.commons.lang3.BooleanUtils 来自 Apache commons Lang API。
          • 加上收集所有用例的努力。
          • 当心,BooleanUtils 仍然是错误的(虽然比Boolean 方法少),因为如果值既不被识别为truefalse,它也不会抛出异常。所以ture(某人在某处打错字)仍然被盲目地假设为false。我在 Guava 中也找不到任何东西(就像 23.0 时没有 Booleans.stringConverter 一样)。
          【解决方案8】:
          public static boolean stringToBool(String s) {
                  s = s.toLowerCase();
                  Set<String> trueSet = new HashSet<String>(Arrays.asList("1", "true", "yes"));
                  Set<String> falseSet = new HashSet<String>(Arrays.asList("0", "false", "no"));
          
                  if (trueSet.contains(s))
                      return true;
                  if (falseSet.contains(s))
                      return false;
          
                  throw new IllegalArgumentException(s + " is not a boolean.");
              }
          

          我将字符串转换为布尔值的方法。

          【讨论】:

            【解决方案9】:

            我就是这样做的:

            "1##true".contains( string )

            我的情况大多是 1 或 true。我使用哈希作为分隔符。

            【讨论】:

              【解决方案10】:

              要获取字符串的布尔值,试试这个:

              public boolean toBoolean(String s) {
                  try {
                      return Boolean.parseBoolean(s); // Successfully converted String to boolean
                  } catch(Exception e) {
                      return null; // There was some error, so return null.
                  }
              }
              

              如果有错误,它将返回null。 示例:

              toBoolean("true"); // Returns true
              toBoolean("tr.u;e"); // Returns null
              

              【讨论】:

              • 你试过了吗? :) 根据 Javadoc,parseBoolean(String s) 不会引发异常。
              【解决方案11】:

              为什么不使用正则表达式?

              public static boolean toBoolean( String target )
              {
                  if( target == null ) return false;
                  return target.matches( "(?i:^(1|true|yes|oui|vrai|y)$)" );
              }
              

              【讨论】:

                【解决方案12】:

                我们创建了soyuz-to 库来简化这个问题(将 X 转换为 Y)。这只是针对类似问题的一组 SO 答案。将库用于这样一个简单的问题可能很奇怪,但在很多类似的情况下确实很有帮助。

                import io.thedocs.soyuz.to;
                
                Boolean aBoolean = to.Boolean("true");
                

                请检查一下 - 它非常简单,还有很多其他有用的功能

                【讨论】:

                  【解决方案13】:

                  访问http://msdn.microsoft.com/en-us/library/system.boolean.parse.aspx

                  这会让你知道该怎么做。

                  这是我从Java documentation 得到的:

                  方法详情

                  parseBoolean

                  public static boolean parseBoolean(String s)

                  将字符串参数解析为布尔值。如果字符串参数不是 null 并且忽略大小写等于字符串“true”,则返回的布尔值表示值 true。

                  参数:

                  s - 包含要解析的布尔表示的字符串

                  返回:字符串参数表示的布尔值

                  自: 1.5

                  【讨论】:

                  • 虽然问题的文本并不明确,但这是一个关于 Java 的问题。至少它是这样标记的。这个答案可能会让人们感到困惑。
                  【解决方案14】:

                  您可以通过 System 类直接设置布尔值等价于任何字符串 并在任何地方访问它..

                  System.setProperty("n","false");
                  System.setProperty("y","true");
                  
                  System.setProperty("yes","true");     
                  System.setProperty("no","false");
                  
                  System.out.println(Boolean.getBoolean("n"));   //false
                  System.out.println(Boolean.getBoolean("y"));   //true   
                   System.out.println(Boolean.getBoolean("no"));  //false
                  System.out.println(Boolean.getBoolean("yes"));  //true
                  

                  【讨论】:

                  • 这是一个将字符串转换为布尔值的非常骇人听闻的提议,毫无意义。
                  猜你喜欢
                  • 2021-02-03
                  • 2013-03-06
                  • 2021-08-29
                  • 1970-01-01
                  • 2018-12-08
                  • 2022-01-20
                  • 1970-01-01
                  • 2013-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多