我正在尝试创建一个压缩算法,该算法将使用字符串"z(#)"
替换字符串中至少连续5个的所有重复零。
例如:
"01100000210000000000000001"
"011z(5)21z(15)1"
我已经能够使用以下内容用子字符串替换所有重复的零,但我无法弄清楚如何找到匹配数并将其替换为"z(#)"
string.replace(/(0{5,})/g, "hi");
这可以使用正则表达式吗?
答案 0 :(得分:3)
这是针对您的示例正则表达式的超级特定,但只是为了演示replacement value parameter of replace
will accept a function。
"01100000210000000000000001".replace(/0{5,}/g, function(matches) {
return 'z(' + matches.length + ')';
})
答案 1 :(得分:1)
String expression = "01100000210000000000000001";
Pattern pattern = Pattern.compile("(0{5,})");
Matcher matcher = pattern.matcher(expression);
while(matcher.find()) {
String match =matcher.group();
expression = expression.replaceFirst(match,"Z("+match.length()+")");
}