如何使用Java正则表达式将二进制字符串拆分为只包含1或0的组?

如何使用Java正则表达式将二进制字符串拆分为只包含1或0的组?,java,regex,string,split,Java,Regex,String,Split,我不熟悉使用正则表达式,但我认为在这种情况下,使用正则表达式将是最快捷、最优雅的方式。我有一个二进制字符串,需要将其拆分为只包含连续零或一的组,例如: 110001 would be split into 11 000 1 我就是搞不懂,这是我当前的代码,谢谢: class Solution { public static void main(String args[]) { String binary = Integer.toBi

我不熟悉使用正则表达式,但我认为在这种情况下,使用正则表达式将是最快捷、最优雅的方式。我有一个二进制字符串,需要将其拆分为只包含连续零或一的组,例如:

110001
would be split into 
11
000
1
我就是搞不懂,这是我当前的代码,谢谢:

class Solution {    
    public static void main(String args[]) {          
            String binary = Integer.toBinaryString(67);
            String[] exploded = binary.split("0+| 1+");                

            for(String string : exploded) {
                System.out.println(string);
            }
        }
    }
}

您可以使用此正则表达式使用match,并使用捕获的组#1进行匹配,而不是拆分:

(([01])\2*)

它不起作用的原因是分割方法的性质。找到的阵列将不包括在阵列中。您需要改用正则表达式搜索。

试试看

public class Solution {

    public static void main(String[] args) {
        String binary = Integer.toBinaryString(67); 
        System.out.println(binary);
        Pattern pattern = Pattern.compile("0+|1+");
        Matcher matcher = pattern.matcher(binary);
        while (matcher.find()) {
            System.out.println(matcher.group(0));
        }
    }

}

如果要使用拆分
(?方法
split
需要一个模式来描述分隔符。为了实现目标,您必须描述组之间的位置(您不希望在拆分位置使用字符):

public static void main(String args[]) {          
    String binary = Integer.toBinaryString(67);
    String[] exploded = binary.split("(?<=([01]))(?!\\1)");

    for(String string : exploded) {
        System.out.println(string);
    }
}
publicstaticvoidmain(字符串args[]){
字符串binary=Integer.toBinaryString(67);

String[]exploded=binary.split((?(0+| 1+)对我有效..你得到了什么结果?出于某种原因,我得到了1和11,你知道,请求一个正则表达式与split一起使用,然后接受一个不太奇怪的答案。这肯定不会帮助你理解split