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

时间:2016-01-25 15:29:15

标签: java regex string split

我是新手使用正则表达式,但我认为在这样的实例中使用它们将是最快捷,最优雅的方式。我有一个二进制字符串,我需要将其拆分为只包含连续零或一的组,例如:

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);
            }
        }
    }
}

5 个答案:

答案 0 :(得分: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));
        }
    }

}

答案 1 :(得分:1)

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

(([01])\2*)

RegEx Demo

答案 2 :(得分:1)

如果您想使用拆分(?<=0)(?=1)|(?<=1)(?=0) 不知道你想要对所有零或者所有的一切做什么。

答案 3 :(得分:1)

方法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);
    }
}

(?<=([01]))通过“后视”描述在分割位置之前,必须有10,并捕获组中的角色。 (?!\\1)通过“负面预测”指定分割位置后的字符必须与位置前找到的字符不同。

这正是拆分成相同角色的组所需要的。你可以在这里用[01]替换.,使其成为分割成具有相同字符的组的通用解决方案,无论是哪一个。

答案 4 :(得分:0)

它不起作用的原因是因为split方法的性质。找到的模式不会包含在数组中。您需要使用正则表达式搜索。