大字符串1和0到BitSet

时间:2015-10-28 05:07:57

标签: java string bitset

我有一个非常大的字符串(64个字符),包含1和0。 样本 - 1001111111101010011101101011100101001010111000101111011110001000

我想要的只是将它转换为包含相同位置的1和0的BitSet var 我正在使用函数 -

private static BitSet fromString(String binary) {
        return BitSet.valueOf(new long[] { Long.parseLong(binary, 2) });
}

已经过了 - Java BitSet Example 我实际上已经找到了问题,那就是我的第64位是1并且该函数抛出了一个数字格式异常 我尝试过多次其他转换,但无法使其正常工作 任何帮助在这里将不胜感激 感谢!!!

1 个答案:

答案 0 :(得分:3)

由于你有一个字符串,仅包含0和1,你只需使用String#charAt()BitSet#set()即可完成,而无需强制转换为Long。例如,像这样:

private static BitSet fromString(String binary) {
    BitSet bitset = new BitSet(binary.length());
    for (int i = 0; i < binary.length(); i++) {
        if (binary.charAt(i) == '1') {
            bitset.set(i);
        }
    }
    return bitset;
}

或者通常使用r-l方向:

private static BitSet fromString(String binary) {
    BitSet bitset = new BitSet(binary.length());
    int len = binary.length();
    for (int i = len-1; i >= 0; i--) {
        if (binary.charAt(i) == '1') {
            bitset.set(len-i-1);
        }
    }
    return bitset;
}