2015-10-28 3 views
3

У меня очень большая строка (64 символа), содержащая 1 и 0. образец - 1001111111101010011101101011100101001010111000101111011110001000Большая строка 1 и 0 на битСеть

Все, что я хочу, чтобы преобразовать его в BITSET вар, содержащий 1 и 0 в той же позиции Я использую функцию -

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

и уже прошли - Java BitSet Example У меня есть на самом деле выяснил проблему, и это мой 64-й бит, равный 1, и функция, генерирующая исключение в числовом формате Я пробовал множество других преобразований, но не могу заставить его работать Любая помощь здесь будет оценена Спасибо !!!

+0

64 бит толкает его с 'long'. Пробовали ли вы это преобразование: http://stackoverflow.com/a/18925602/14955? – Thilo

+0

Если вы используете java8, вы можете сделать 'Long.parseUnsignedLong()', и он должен работать нормально .. – Codebender

ответ

3

Поскольку у вас есть строка, контактирующая только с 0 и 1, вы можете просто сделать это без литья в Long, просто используя String#charAt() и BitSet#set(). Так, например, следующим образом:

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

Или с г-л ориентации, как это обычно используется:

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