Java 查找集合位的索引

Java 查找集合位的索引,java,bit-manipulation,Java,Bit Manipulation,这可能很简单,但我对位操作还不熟悉。我有一个位串(比如报警串),我想找到其中所有1的索引号,这样我就可以返回相关的报警或错误代码。例如,如果alarm_string=1011000,那么我的方法应该返回3、4和6。 如何使用位操作来实现这一点? 提前谢谢 此方法应将位字段转换为设置位位置的列表: List<Integer> setBits(int in) { final List<Integer> setBits = new ArrayList<>();

这可能很简单,但我对位操作还不熟悉。我有一个位串(比如报警串),我想找到其中所有1的索引号,这样我就可以返回相关的报警或错误代码。例如,如果alarm_string=1011000,那么我的方法应该返回3、4和6。 如何使用位操作来实现这一点?
提前谢谢

此方法应将位字段转换为设置位位置的列表:

List<Integer> setBits(int in) {
  final List<Integer> setBits = new ArrayList<>();
  for (int i = 0; in != 0; i++, in >>= 1)
    if (i & 0 == 1) setBits.add(i);
  return setBits;
}
列表立根(int-in){
最终列表setBits=newarraylist();
对于(int i=0;in!=0;i++,in>=1)
如果(i&0==1),则添加(i);
回归挫折;
}
如果您的输入只是一个字符串,那么问题就很简单了

List<Integer> setBits(String in) {
  final List<Integer> setBits = new ArrayList<>();
  for (int i = in.length()-1, j = 0; i >= 0; i--, j++)
    if (in.charAt(i) == '1') setBits.add(j);
  return setBits;
}
列表挫折(字符串输入){
最终列表setBits=newarraylist();
对于(int i=in.length()-1,j=0;i>=0;i--,j++)
如果(在字符(i)=‘1’),则添加(j);
回归挫折;
}
在幕后进行位操作。首先将
字符串
转换为字符串。然后,使用查找1:

BitSet bs = new BitSet(inputString.length());

for (int i = 0; i < inputString.length(); ++i) {
  if (inputString[i] == '1') {
    bs.set(i);
  }
}

List<Integer> ones = new ArrayList<>();

 for (int i = bs.nextSetBit(0); i >= 0; i = bs.nextSetBit(i+1)) {
     ones.add(i);
 }

return ones;
bitsetbs=新的位集(inputString.length());
对于(int i=0;i=0;i=bs.nextSetBit(i+1)){
一.加入(i);
}
返回一个;
字符串位=“1011000”;
列表索引=新的ArrayList();
对于(int i=bits.lenght()-1;i>=0;i--){
if(位字符(i).相等信号酶(“1”)){
索引.add(bits.lenght()-i);
}
}等信号盒

如果一个普通整数+位旋转太难,a如何?问题是输入是一个字符串,它提到解决方案应该使用位操作。好的,那么你的观点是什么?你的评论和OP的问题一样令人困惑。我的观点很简单,你的第一个解决方案不适合这个问题,因为它假设输入是int。你的第二个解决方案也不适合,因为它不使用位操作。这两个约束使解决方案有点奇怪。但是,这就是这个问题似乎要问的问题。那么,对于任何符合这个问题的有意义的解决方案,你的观点是什么?任意插入位操作?正如我所说,我希望问题不要那么模棱两可。正如我所说,
位集
的实现进行位操作。您好,感谢这些解决方案。。。我必须使用位操作,因为它的速度更快,而且我有一个很长的字符串:/,我尝试了一些移位运算符,但没有成功..将尝试这两种解决方案。再次感谢Hanks的响应,但是我可以很容易地遍历字符串以获得索引位置,但是我不想这样做。
String bits = "1011000";

List<Integer> indices = new ArrayList<Integer>();

for(int i = bits.lenght()-1; i>=0; i--){
   if(bits.charAt(i).equalsIgnorCase("1")){
      indices.add(bits.lenght()-i);
   }
}equalsIgnoreCase