質問
私はこのプログラムを使用しています:
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 to 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配列を特定のサイズに強制する方法は1つしかありませんが、最後に追加するゼロの数を知る必要があるので、書き直しましたこのようなあなたの方法:
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つの」を保存するため、ビットセットの最後のエントリは常に「1」であり、長さは常にビットセットの最後の「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;
}
}
}
他のヒント
同様のタスクを完了するために最適ではありません。以下を思いついた:
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以外のものである場合、スロー例外を追加できます。
所属していません StackOverflow