[英]How to convert from char[] array to 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。 有没有办法...
好吧,不知道为什么要这样做,但是为什么不反转您的方法呢?
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;
}
使用位图的问题是,它仅存储“ 1”,因此BitSet中的最后一个条目将始终为“ 1”,并且长度将始终引用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;
}
}
}
做一个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,则可以添加抛出异常。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.