【问题标题】:How to split a binary string into groups that containt only ones or zeros with Java regular expressions? [duplicate]如何使用 Java 正则表达式将二进制字符串拆分为仅包含 1 或 0 的组? [复制]
【发布时间】:2016-05-01 23:27:32
【问题描述】:

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

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

【问题讨论】:

  • (0+|1+) 为我工作.. 你得到什么结果?
  • 由于某种原因我得到 1 和 11
  • 你知道,请求一个正则表达式与 split 一起使用,然后接受一个不奇怪的答案。它肯定不会帮助你理解 split

标签: java regex string split


【解决方案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);
    }
}

(?&lt;=([01]))通过“look-behind”描述,在拆分位置之前,必须有10,并捕获组中的字符。 (?!\\1) 通过“负前瞻”指定分割位置之后的字符必须不同于该位置之前找到的字符。

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

【讨论】:

    【解决方案2】:

    如果你想使用拆分(?&lt;=0)(?=1)|(?&lt;=1)(?=0)
    不确定你想用全零或全一来做什么。

    【讨论】:

      【解决方案3】:

      试试

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

          (([01])\2*)
          

          RegEx Demo

          【讨论】:

            猜你喜欢
            • 2021-01-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-12-29
            • 2016-06-24
            • 2014-04-22
            • 2011-07-16
            相关资源
            最近更新 更多