2017-01-19 6 views
1

に分割しますビットセットをより多くの塊にします。分割関数は、ビットセットのカーディナリティに依存します。これは、trueに設定されたビットの数です。機能またはことを達成するための可能な方法があるのBitSetというJavaライブラリを使用してJavaはビットセットを分割します

OUTPUT: 100000 - 001000 - 000100 - 000001 

:以下

INPUT: 101101 

所望の出力されます。 は、たとえば、私は基数4と、このBitSetのを持っています?

答えて

2

次のコードが設定された単一ビットを持つすべての可能なマスクを適用して、唯一の非ゼロの結果保つ:

int[] split(int input) { 
    return IntStream.iterate(Integer.reverse(1), mask -> mask >>> 1) 
      .limit(Integer.SIZE) 
      .map(mask -> input & mask) 
      .filter(result -> result != 0) 
      .toArray(); 
} 
+0

私はInteger.SIZEを使用したい –

+0

@ Jean-FrançoisSavard良いキャッチ、ありがとう。 –

1

はい。基本操作ANDを使用します。

Basicaly:

xxxxxx AND 110000 = xx0000. 

すべてのサブシーケンスを繰り返し手順。

0

あなたがここにいくつかのループを必要とする:

あなたがすべきの位置を見つけるために、あなたは、このようなループさせることができます。位置は1枚の、他のプリントを印刷し、リストに存在する場合は、

を0

public static void main(String[] args) { 
    String Input = "101101"; 

    //find positions 
    List<Integer> listPositivePosition = new ArrayList<>(); 
    for(int i = 0; i<Input.length(); i++){ 
     if(Input.charAt(i)=='1'){ 
      listPositivePosition.add(i); 
     } 
    } 

    for(int i = 0; i<listPositivePosition.size(); i++){ 
     for(int j = 0; j<Input.length(); j++){ 
      //If the position exist in the List then print 1 else print 0 
      if(j == listPositivePosition.get(i)){ 
       System.out.print("1"); 
      }else{ 
       System.out.print("0"); 
      } 
     } 
     System.out.println(); 
    } 

} 

希望すると、これが役に立ちます。

+3

「文字列」操作を含む回答は正しいとは思わないエル。たぶん 'Integer.toBinaryString(...)'から離れて – martijnn2008

0

許してください、私のメソッドの命名規則:)

public static void main(String[] args) { 

    final String a = "100100"; 
    System.out.println(Arrays.toString(foo(a))); 
} 

private static String[] foo(String a) { 
    final long counted = IntStream.range(0, a.length()).filter(i -> a.charAt(i) == '1').count(); 
    final String[] ret = new String[(int) counted]; 
    int index = 0; 
    for (int i = 0; i < a.length(); i++) { 
     if (a.charAt(i) == '1') { 
      ret[index] = ret(a, i); 
      index++; 
     } 
    } 
    return ret; 

} 

private static String ret(String a, int i) { 
    final StringBuilder sb = new StringBuilder(a.replaceAll(".", "0")); 
    sb.setCharAt(i, '1'); 
    a = sb.toString(); 
    return a; 
} 
0

ピュアJavaとの読みやすい解:

List<String> binSplitter(String input) { 

    String str = new String(new char[input.length()]).replace("\0", "0"); 
    List<String> chunks = new ArrayList<>(); 

    for (int i = 0; i < input.length(); i++) { 
     if (input.charAt(i) == '1') { 
      chunks.add(str.substring(0, i) + "1" + str.substring(i + 1, input.length())); 
     } 
    } 

    return chunks; 
}