String JavaME:将字符串转换为布尔值
我正在为黑莓手机开发,我遇到了一个愚蠢的问题: 我需要将字符串值“1”和“0”分别转换为true和false。尽管如此,Blackberry JDK基于Java 1.3,所以我不能使用Boolean.parseBoolean、Boolean.valueOf或Boolean.getValue 很明显,我可以做如下事情:String JavaME:将字符串转换为布尔值,string,blackberry,java-me,String,Blackberry,Java Me,我正在为黑莓手机开发,我遇到了一个愚蠢的问题: 我需要将字符串值“1”和“0”分别转换为true和false。尽管如此,Blackberry JDK基于Java 1.3,所以我不能使用Boolean.parseBoolean、Boolean.valueOf或Boolean.getValue 很明显,我可以做如下事情: if (str.equals("1")) return true; else if (str.equals("0")) return false; 但这看起来非常难看,可能这些字
if (str.equals("1")) return true;
else if (str.equals("0")) return false;
但这看起来非常难看,可能这些字符串值稍后会变为“true”和“false”。那么,有没有其他方法可以在这些类型之间进行转换(String->boolean,Java1.3)
更新:这个问题的所有答案都非常有用,但我需要标记一个,所以我选择了Ishtar的答案
即便如此,我的解决方案还是综合了多种答案 如果您没有
Boolean.valueOf(字符串s)
。。。是的,差不多就是这样。我将定义您自己的静态方法,如:
public static boolean booleanFromString(String s)
{
return s.equals("1");
}
这将解决“以后可能更改为true或false”的问题,因为您可以在方法中添加/更改该值,而不必更改代码中的任何其他内容
也许这些字符串值可以更改
以后改为“真”和“假”
不要硬编码参数
这样定义你自己的方法
public static final String TRUE = "true"; //"1"
public static boolean strToBool(String s) {
// don't hard code your parameter.
return str.equalsIgnoreCase(TRUE);
}
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);
}
您应该检查null和空格字符。移除它们并检查值
return (str!=null && str.trim().equals("1"));
如果您以后将其更改为“真/假”,则不会意外订购。使用错误参数调用将引发异常,而不是猜测并返回false。在我看来,“pancake”
不是false
公共静态布尔stringToBool(strings){
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.");
}
s=s.toLowerCase();
Set-trueSet=newhashset(Arrays.asList(“1”、“true”、“yes”);
Set falseSet=newhashset(Arrays.asList(“0”、“false”、“no”);
如果(trueSet.contains)
返回true;
if(falseSet.contains)
返回false;
抛出新的IllegalArgumentException(s+“不是布尔值”);
}
增强答案。实际上。。在这种情况下,我会硬编码参数,因为“true”字符串的定义是一个(或一组)非常特殊的值+1尽管如此。@pst:你是对的。但OP的情况不同。请参见-->
字符串值可以更改
@John然后我会在方法中更改它们;-)@pst:同样,你是对的。所以答案是将其封装到方法中。@Brian:更改方法体。或者将方法一分为二。无论如何,把它记录下来。这个问题把我引向了DailyWTF的文章。我不是在侮辱你,只是建议布尔值的变化应该是非常罕见的,请保持简单,即使你在函数中硬编码“1”或“true”,也没关系。有些事情是确定的,有些则永远不会成为核心语言。
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.");
}