首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java拆分BitSet

Java拆分BitSet
EN

Stack Overflow用户
提问于 2017-01-19 14:18:16
回答 5查看 450关注 0票数 1

我想把一个位集分割成更多的块。分割函数依赖于位集的基数,这是设置为true的位数。例如,我有一个带有基数4的BitSet:

代码语言:javascript
复制
INPUT:  101101

所需的输出如下:

代码语言:javascript
复制
OUTPUT: 100000 - 001000 - 000100 - 000001

使用名为BitSet的Java库是否有一种函数或可能的方法来实现这一点?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2017-01-19 14:47:03

以下代码应用每种可能的单比特掩码,并且只保留非零的结果:

代码语言:javascript
复制
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();
}
票数 2
EN

Stack Overflow用户

发布于 2017-01-19 14:20:53

是。使用基本操作和。

基本原理:

代码语言:javascript
复制
xxxxxx AND 110000 = xx0000.

对所有后续的重复过程。

票数 1
EN

Stack Overflow用户

发布于 2017-01-19 14:24:58

这里需要一些循环:

您应该找到1的位置,然后可以创建如下循环:

如果该位置存在于列表中,则打印1其他打印0。

代码语言:javascript
复制
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();
    }

}

希望这能帮到你。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41744022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档