1

我正在使用这个程序:

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;
} 

BitSetobj 转换为char[]数组。现在在对(添加一些零)数组进行一些修改之后,char[]我想将它转换回BitSetobj. 有没有办法...

4

2 回答 2

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;
}

编辑:由于您似乎想修复您的方法,因此我只能想到一种方法将 char 数组强制为特定大小,但是您需要知道要在末尾附加多少个零,所以我重写了你的方法是这样的:

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;
    }

使用 Bitmap 的问题是,它只存储“one”,因此 BitSet 中的最后一个条目将始终是“one”,并且长度将始终引用 BitSet 中的最后一个“one”。

例如:

 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;
        }
    }

}
于 2011-03-23T15:46:09.287 回答
0

做一个单元测试来完成类似的任务。想出了以下几点:

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,则可以添加抛出异常。

于 2016-11-14T23:42:07.150 回答