2011-03-25 48 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答案。