【问题标题】:RunLength Encoding - decompression (Java)运行长度编码 - 解压缩 (Java)
【发布时间】:2015-02-04 18:28:27
【问题描述】:

我正在使用 RLE,我正在尝试用 Java 创建一个解压缩程序。我有:

import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.Scanner;

public class Decompress {

    public static String decode(String string) {

        StringBuffer dest = new StringBuffer();
        Pattern pattern = Pattern.compile("[0-9]+|[a-zA-Z]");
        Matcher matcher = pattern.matcher(string);
        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) {

          Scanner sc = new Scanner(System.in);
          System.out.print("Enter string: ");
          String string = sc.nextLine();
          String output = "";
          System.out.println(decode(output));
    }
}

但这对我不起作用。我有用户输入,如 a2b3 和输出 aabbb 它不能被硬编码

【问题讨论】:

  • Integer.parseInt() 如果您传递的字符串不是整数,则抛出 NumberFormatException。如果输入格式为2a3b,则您的代码可以正常工作。

标签: java run-length-encoding


【解决方案1】:

您可能应该将([a-zA-Z])([0-9]+) 用作正则表达式。这样你就有了正则表达式已经解析的部分。

Pattern pattern = Pattern.compile("([a-zA-Z])(\d+)");
Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
    String letter = matcher.group();
    int number = Integer.parseInt(matcher.group());
    while (number-- != 0) {
        dest.append(letter);
    }
    matcher.find();
}

【讨论】:

    猜你喜欢
    • 2012-10-10
    • 1970-01-01
    • 2012-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多