2011-06-14 82 views
11

我找不到Boolean類中的任何方法來將布爾值序列化爲「1」和「0」而不是「true」和「假」。Serialize布爾值爲「1」和「0」而不是「true」和「false」

是否有任何本機功能來做到這一點?如果不是,最好的方法是什麼(最優化的方式)?

更新:我的意思是從Boolean中產生String

+1

什麼方法*序列化*布爾'爲「真」和「假」?或者你只是在談論從'Boolean'生成'String'? – 2011-06-14 08:12:33

+0

你爲什麼想這樣做? – 2011-06-14 08:12:53

+5

讓'b'成爲一個布爾值:'int i = b? 1:0;'。 – Kevin 2011-06-14 08:13:00

回答

10

如果你在談論生產從給定Boolean一個String,則沒有,沒有產生「0」或「1」沒有內置的方法,但是你可以很容易地把它寫:

public static String toNumeralString(final Boolean input) { 
    if (input == null) { 
    return "null"; 
    } else { 
    return input.booleanValue() ? "1" : "0"; 
    } 
} 

根據您的使用情況,如果input爲空,讓它拋出NullPointerException可能更合適。如果您遇到這種情況,那麼您可以將方法僅限於第二行return

+0

看起來你錯過了你的方法中的數據類型 – 2011-06-14 08:17:39

+0

@ Eng.Fouad:的確,我確實感謝你的提醒。現在修復。 – 2011-06-14 08:18:11

-1

我不確定,但只是扔掉它。你可以使用你自己的裝飾類。

+0

什麼?笏? INI? Wataguan? – 2011-06-14 08:25:47

+0

裝飾設計模式可讓您以不同的方式自定義您的輸出。你可以將'boolean'裝飾成'0'和'1'值。 – 2011-06-14 08:41:55

+0

您是否看到OP要求提供「最優化」解決方案?你認爲裝飾者有資格嗎? – 2011-06-14 09:26:20

3

您可以使用CompareTo

public static Integer booleanToInteger(Boolean bool) 
{ 
    if(bool == null) return null; 
    else return bool.compareTo(Boolean.FALSE); 
} 
+0

我不會鼓勵這一點,因爲它很模糊而且不明顯。並且*如果*你這樣做,我會使用'Boolean.FALSE'作爲參數,以便跳過自動裝箱。 – 2011-06-14 08:43:04

+0

@Joachim Sauer:謝謝,我解決了。 – 2011-06-14 08:46:23

+0

...而且模糊/混淆代碼不太可能被JIT編譯器優化。 – 2011-06-14 09:28:17

1

如果你想序列化到一個字符,你可以做

public static char toChar(final Boolean b) { 
    return b == null ? '?' : b ? '1' : '0'; 
} 
-2

使用節儉API:

TSerializer serializer = new TSerializer(new TSimpleJSONProtocol.Factory()); 
String json = serializer.toString(object); 

將布爾0或1而不是真/假。

+7

你是認真的嗎?安裝一個完整的庫,在工廠中使用2個對象,所有隻是將一個字符串轉換爲布爾值... – 2014-06-20 08:10:15

相關問題