java-me:将字符串转换为布尔值

Posted

技术标签:

【中文标题】java-me:将字符串转换为布尔值【英文标题】:java-me: Convert String to boolean 【发布时间】:2011-07-22 16:12:00 【问题描述】:

我正在为 BlackBerry 开发,但遇到了这个愚蠢的问题:

我需要将字符串值“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;

但这看起来很丑陋,也许这些字符串值以后可能会更改为“true”和“false”。那么,有没有另一种方法可以在这些类型之间进行转换(String -> boolean,Java 1.3)?

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

即便如此,我的解决方法是多个答案的组合。

【问题讨论】:

这个问题将我引向 DailyWTF 文章。我并不是在侮辱您,只是建议布尔值更改应该是非常罕见的情况阅读thedailywtf.com/Articles/What_Is_Truth_0x3f_.aspx 保持简单,即使您在函数中硬编码“1”或“true”也可以。有些东西只是确定性,否则它们永远不会成为核心语言。 【参考方案1】:
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.");

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

【讨论】:

【参考方案2】:

如果你没有Boolean.valueOf(String s) ...是的,差不多就是这样。我会定义你自己的静态方法,比如:

public static boolean booleanFromString(String s)

    return s.equals("1");

这将解决您“以后可能更改为真或假”的问题,因为您可以在方法中添加/更改它,而不必更改代码中的任何其他内容。

【讨论】:

【参考方案3】:

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

不要对参数进行硬编码。

所以像这样定义你自己的方法。

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

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

【讨论】:

实际上.. 这是我硬编码我的参数的一种情况,因为“真”字符串的定义是一个(或一组)非常特殊的值(s)。 +1 虽然。 @pst:你是​​对的。但OP的情况不同。见 --> string values could change @John 然后我会在方法中更改它们 ;-) @pst:你又是对的。所以答案是把它封装到方法中。 @Brian:更改方法体。或将该方法一分为二。无论如何,记录它。【参考方案4】:

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

【讨论】:

【参考方案5】:

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

return (str!=null && str.trim().equals("1"));

【讨论】:

【参考方案6】:
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答案。

【讨论】:

以上是关于java-me:将字符串转换为布尔值的主要内容,如果未能解决你的问题,请参考以下文章

如何使用javascript将字符串数组转换为布尔值? [复制]

TypeScript:将布尔值转换为字符串值

将字符串转换为布尔值[重复]

Ruby:如何将字符串转换为布尔值

PL/SQL 将字符串转换为布尔值

Python:将字符串列表转换为布尔值,其中布尔值以字符串形式存在[重复]