Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中获得二进制字符串的所有设置位的位置?_Java_String_Binary - Fatal编程技术网

如何在java中获得二进制字符串的所有设置位的位置?

如何在java中获得二进制字符串的所有设置位的位置?,java,string,binary,Java,String,Binary,例如,如果二进制字符串为10100010,则程序必须返回第1、3和7位,即1的位置。下面是您要查找的代码。请注意,正则表达式以第0位开始 String regex = "[1]"; String data = "10100010"; Matcher m = Pattern.compile(regex).matcher(data); while(m.find()) { System.out.println(m.group() + " => " + (m.start()+1) ); }

例如,如果二进制字符串为10100010,则程序必须返回第1、3和7位,即1的位置。

下面是您要查找的代码。请注意,正则表达式以第0位开始

String regex = "[1]"; 
String data = "10100010"; 
Matcher m = Pattern.compile(regex).matcher(data);
while(m.find())
{
System.out.println(m.group() + "  => " + (m.start()+1) );
}
两种选择:

  • 将其转换为整数/长(如果可能),然后每次移动一位并检查是否为1。例如:

    String str = "10100010";
    Integer x = Integer.valueOf(str);
    int len = str.length();
    while (x != 0) {
        if (x & 0x1 == 1) {
            System.out.println(len);
        }
        len--;
        x >>= 1;
    }
    
  • 按索引扫描字符串并检查其值是否为1:

    for (int i = 0; i < str.length(); i++) {
        if (str.chatAt(i) == '1') {
            //print
        }
    }
    
    for(int i=0;i
  • char[]str=“10100010.toCharArray();
    
    对于(inti=0;iIt)这个问题看起来很像是“请为我做家庭作业”。而你就是这么做的。意思是:回答这些不需要动脑筋的问题很有诱惑力;很可能你并不是在做一个真正需要帮助的人。因为他会从自己做这件事中学到很多嗯,这似乎不起作用。顺便说一句:你的答案太复杂了。你真的认为一个新手需要使用正则表达式吗?@EddyG你不必担心他将来或现在会要求使用正则表达式,这是一些即使是OCJP也解释过的东西,每当你必须从字符串中获取数据时都要使用,所以请冷静一下提供的rfect解决方案above@SouravDeb善意地赞成它,如果它有助于你至少把它看作是一个有用的回答它看起来很像这个问题归结为“请帮我做家庭作业”。。你就是这么做的。意思是:尽管回答这些不需要动脑筋的问题很有诱惑力,但很可能你并不是在帮助那个请求帮助的人。因为他会从自己做这件事中学到很多。如果你想知道落选的原因:这个网站的目的不是让其他人做你的家庭作业。你不应该问“请为我做这件事”,但“这是我到目前为止所做的事情,我在这里被卡住了。”Sourav Deb至少考虑一下我的答案,并检查它是否正确,如果它帮助了你。
     char[] str="10100010".toCharArray();
            for(int i=0;i<str.length;i++){
                if(str[i]=='1'){
                    int setBit=1;
                    setBit+=i;
                    System.out.println(setBit+"th");
                }
            }