Java中如何按特定倍数的字符序列分割字符串?
解决Java中按3的倍数长度连续0序列分割字符串的问题
首先得指出你之前的正则写法问题所在:你用的[0{3}]是字符类(character class),在字符类里{、3、}都是字面量字符,这个正则实际上会匹配单个的0、{、3或},完全不是你想要的“连续3个0的重复序列”,这就是为什么split没生效。
正确的正则表达式
要匹配长度为3的倍数的连续0序列(比如3个、6个、9个...),你需要用这个正则:(0{3})+
0{3}:精确匹配3个连续的0+:表示前面的分组(也就是3个0)可以重复1次或多次,这样就覆盖了3、6、9...个连续0的情况
Java代码示例
public class BinarySplit { public static void main(String[] args) { String binaryStr = "101010100010000001110101110111"; // 使用正确的正则进行分割 String[] parts = binaryStr.split("(0{3})+"); // 验证结果 System.out.println(java.util.Arrays.toString(parts)); // 输出:[1010101, 1, 1110101110111] } }
额外注意点
如果你的字符串开头或结尾存在符合条件的0序列(比如"000123000"),split后会产生空字符串:
String testStr = "000123000"; String[] testParts = testStr.split("(0{3})+"); // 输出:[, 123, ]
如果需要过滤掉这些空字符串,可以用流处理:
import java.util.Arrays; import java.util.stream.Collectors; // ... String[] filteredParts = Arrays.stream(testParts) .filter(s -> !s.isEmpty()) .toArray(String[]::new); // 输出:[123]
内容的提问来源于stack exchange,提问作者Joey
相关产品推荐
相关产品推荐

