有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java替换多次出现的字符

我发现

String seq = "123456789";
    String regex = seq.replaceAll(".", "(?=[$0-9]([a-z]))?") + "[0-9][a-z]";
    String repl = seq.replaceAll(".", "\\$$0");

这将4a变成aaaa,3b变成bbb等等。。。我需要相反的答案,但我想不出来。我需要把aaaa变成4a,bbb变成3b等等。非常感谢


共 (1) 个答案

  1. # 1 楼答案

    以下是Java中运行长度编码/解码实现的示例:

    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    public class RunLengthEncoding {
    
        public static String encode(String source) {
            StringBuffer dest = new StringBuffer();
            for (int i = 0; i < source.length(); i++) {
                int runLength = 1;
                while (i+1 < source.length() && source.charAt(i) == source.charAt(i+1)) {
                    runLength++;
                    i++;
                }
                dest.append(runLength);
                dest.append(source.charAt(i));
            }
            return dest.toString();
        }
    
        public static String decode(String source) {
            StringBuffer dest = new StringBuffer();
            Pattern pattern = Pattern.compile("[0-9]+|[a-zA-Z]");
            Matcher matcher = pattern.matcher(source);
            while (matcher.find()) {
                int number = Integer.parseInt(matcher.group());
                matcher.find();
                while (number  != 0) {
                    dest.append(matcher.group());
                }
            }
            return dest.toString();
        }
    
        public static void main(String[] args) {
            String example = "WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWBWWWWWWWWWWWWWW";
            System.out.println(encode(example));
            System.out.println(decode("1W1B1W1B1W1B1W1B1W1B1W1B1W1B"));
        }
    }
    

    摘自这里:

    http://rosettacode.org/wiki/Run-length_encoding

    (本页包含72种不同编程语言的等效示例,以实现相同的目标)

    为了达到你的要求,你可以使用“编码”方法

    这里测试:http://www.browxy.com/SubmittedCode/21369

    Regex本身并不是实现这一目标的合适工具