2011-03-25 47 views
14

我正在开发黑莓和我被困这个愚蠢的问题:Java的我:字符串转换为布尔

我需要转换字符串值“1”和“0”的真假,分别。尽管如此,Blackberry JDK基于Java 1.3,所以我不能使用Boolean.parseBoolean,Boolean.valueOf或者Boolean.getValue。

很显然,我可以这样做:

if (str.equals("1")) return true; 
else if (str.equals("0")) return false; 

但是这看起来很丑陋,也许这些字符串值可以改变为“真”和“假”之后。那么,是否有另一种方法来转换这些类型(字符串 - >布尔,Java 1.3)?

已更新:这个问题的所有答案都非常有帮助,但我需要标记一个,所以我选择了Ishtar的答案。

即便如此,我的修复是多个答案的组合。

+0

此问题引导我到DailyWTF文章。我并不侮辱你,只是建议改变布尔值应该是一个非常罕见的事件,即使你对“1”或“true”进行硬编码,也应该保持简单。在功能上它是可以的。有些东西只是确定的东西,否则它们永远不会成为核心语言。 – drubin 2011-03-25 14:02:05

回答

14
public static boolean stringToBool(String s) { 
    if (s.equals("1")) 
    return true; 
    if (s.equals("0")) 
    return false; 
    throw new IllegalArgumentException(s+" is not a bool. Only 1 and 0 are."); 
} 

如果稍后将其更改为 “真/假”,你会不小心订购28,000 tons of coal。调用错误的参数会抛出异常,而不是猜测并返回false。在我看来,"pancake"不是false

9

如果您没有Boolean.valueOf(String s) ...是的,那就是它。我定义自己的静态方法,如:

public static boolean booleanFromString(String s) 
{ 
    return s.equals("1"); 
} 

这将解决你的“可能更改为真或假的以后”的问题,因为你可以添加/修改,在方法和没有改变任何东西在你的码。

2

也许这些字符串值可能会改变 为“真”和“假”后

不要硬代码的参数。

因此定义你自己的方法是这样的。

public static final String TRUE = "true"; //"1" 

public static boolean strToBool(String s) { 
    // don't hard code your parameter. 
    return str.equalsIgnoreCase(TRUE); 
} 
+0

实际上..这是一种情况,我*将*硬编码我的参数,因为“真”字符串的定义是一个(或一组)非常特定的值。 +1虽然。 – 2011-03-25 05:45:52

+0

@pst:你说得对。但OP的情况不同。看看 - >'字符串值可能会改变' – 2011-03-25 05:49:33

+0

@John然后我会改变他们的方法;-) – 2011-03-25 05:54:54

2

Java的Boolean对象(如果我没记错的话)早已2个常量:

  • Boolean.TRUE
  • Boolean.FALSE

可以使用Boolean.booleanValue()返回其相应boolean值。

您可以创建自己的valueOf(String s)方法返回一个boolean和/或Boolean像这样:

public static boolean toBoolean(String s) { 
    return ((s != null) && s.equalsIgnoreCase("true")); 
} 

public static Boolean valueOf(String s) { 
    return (toBoolean(s)? Boolean.TRUE : Boolean.FALSE); 
} 
2

你应该检查空和空格字符。删除它们并检查值。

return (str!=null && str.trim().equals("1")); 
0
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."); 
} 

增强Ishfar答案。