我是新手使用正则表达式,但我认为在这样的实例中使用它们将是最快捷,最优雅的方式。我有一个二进制字符串,我需要将其拆分为只包含连续零或一的组,例如:
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 :(得分: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)
答案 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]))
通过“后视”描述在分割位置之前,必须有1
或0
,并捕获组中的角色。 (?!\\1)
通过“负面预测”指定分割位置后的字符必须与位置前找到的字符不同。
这正是拆分成相同角色的组所需要的。你可以在这里用[01]
替换.
,使其成为分割成具有相同字符的组的通用解决方案,无论是哪一个。
答案 4 :(得分:0)
它不起作用的原因是因为split方法的性质。找到的模式不会包含在数组中。您需要使用正则表达式搜索。