用数字替换出现(在Java中查看和说出数字作为正则表达式)

时间:2015-12-10 13:39:43

标签: java ruby regex count

我想在Java中了解一下这个Ruby代码的等价物:

str.gsub(/(.)\1*/) do
    "#{$&.size}#{$1}"
end

它的作用是用重复次数和字符本身替换相等连续字符的出现。 例如:“111”将变为“31”,因为有三个,“111223”将变为“312213”,因为有三个,两个二,一个三等。它基本上被称为“外观和 - “数字。我想用正则表达式来完成这个,可能没有任何循环。

2 个答案:

答案 0 :(得分:2)

好吧,您可以使用基于Matcher#appendReplacement的代码:

String s = "111";
StringBuffer result = new StringBuffer();
Matcher m = Pattern.compile("(.)\\1+").matcher(s);
while (m.find()) {
    m.appendReplacement(result, m.group().length() + m.group(1));
}
m.appendTail(result);
System.out.println(result.toString()); // => 31

请参阅IDEONE demo

答案 1 :(得分:0)

考虑这个记录的例子

    //For concatenating output
    StringBuilder sb = new StringBuilder();
    //The Matcher finding digits followed by at least one of the same
    Matcher m = Pattern.compile("(\\d)\\1+").matcher("1112222233");
    //While consecutive digits found
    while(m.find()) {
        //Append length of match (= number of same digits)
        sb.append(m.group().length())
        //append the matched character / digit
            .append(m.group(1));
    }
    //output
    System.out.println(sb.toString());