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