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:将字符串转换为布尔值的主要内容,如果未能解决你的问题,请参考以下文章