2011-03-23 52 views
1

我使用這個程序:如何從字符轉換[]數組的BitSet

private static char[] toCharArray(final BitSet bs){  
    final int length = bs.length();  
    final char[] arr = new char[length];  
    for(int i = 0; i < length; i++){   
     arr[i] = bs.get(i) ? '1' : '0'; 
    }  
    return arr; 
} 

轉換BitSet obj轉換爲char[]陣列。現在,在對char[](添加了一些零)陣列進行一些修改之後,我想將其轉換回BitSet obj。有沒有辦法...

回答

1

不知道爲什麼你這樣做,但爲什麼不反轉你的方法?

private static BitSet toBitset(final char[] entries){ 
     final int length = entries.length; 
     BitSet bs = new BitSet(length); 
     for(int i = 0; i < length; i++){ 
       bs.set(i, entries[i] == '1'); 
     } 
     return bs; 
} 

編輯: 因爲它似乎你想解決您的方法,只有我能想到的 迫使字符數組爲特定大小的一種方式,但是你需要知道你要多少個零 追加到最後,所以我改寫了你的方法是這樣的:

private static char[] toCharArray(final BitSet bs, int expectedBits){ 
     if(expectedBits < bs.length()){ 
      expectedBits = bs.length(); 
     } 
     final char[] arr = new char[expectedBits]; 
     for(int i = 0; i < expectedBits; i++){ 
      arr[i] = bs.get(i) ? '1' : '0'; 
     } 
     return arr; 
    } 

使用位圖的問題是,它只有商店「One」形成,所以在BitSet中的最後一項將永遠是一個「一「,並且該長度將始終引用BitSet中的最後一個」1「。

例如:

BitSet bs = new BitSet(); 
     for(int i = 0; i < 1000; i++){ 
      bs.set(i, false); 
     } 
System.out.println(bs.length()); 

打印出 「0」,而

BitSet bs = new BitSet(); 
bs.set(10001, true); 
System.out.println(bs.length()); 

會打印出10002

這可以幫助你(但你需要編輯上述方法相應地):

class FixedBitSet extends BitSet { 

    private int maxLength = 0; 

    public int maxLength(){ 
     return maxLength; 
    } 

    @Override 
    public void set(int bitIndex, boolean value) { 
     super.set(bitIndex, value); 
     if(bitIndex > maxLength){ 
      maxLength = bitIndex; 
     } 
    } 

} 
+1

'==「1'',對不對? – 2011-03-23 15:54:13

+0

是的,你是對的 – sharpner 2011-03-23 15:54:59

+0

是的,我肯定會澄清我的觀點:在SQL服務器中存儲位(二進制數據)時,如果二進制值以0開頭而不是1(0之前的所有0被刪除),則會丟失數據。現在,在對數據進行檢索之後,我需要將這些零返回,然後再對其執行一些邏輯操作。因此是轉換爲字符數組並返回。 – JavaBits 2011-03-23 15:58:08

0

做一個UnitTest來完成一個類似的任務。想出了以下內容:

BitSet bs = new BitSet(testArrayChar.length); 

for (int y=0; y<testArrayChar.length; y++) 
{ 
    if(testArrayChar[y]=='0') 
    { 
     bs.set(y, false); 
    } 
    else if(testArrayChar[y]=='1') 
    { 
     bs.set(y, true); 
    } 
} 

可以添加引發異常,如果一個字符是其他的東西比0或1

相關問題