如何将诸如“a3b3”之类的字符串解压缩到aaabbb?

时间:2013-11-22 00:52:55

标签: java compression

我正在尝试接受a3b3之类的用户输入并将其解压缩到aaabbb。这是我提出的代码,它打印a33b

String getDecompressedText() {
    int i;
    int n = 1;
    String d = "";
    for (i = 0; i < compressedText.length(); i++){
        if (Character.isDigit(compressedText.charAt(i)) == true) {
            while (n < compressedText.charAt(i)-'0') {
                d += compressedText.charAt(i);
                n++;
            }
        }
        else
            d += compressedText.charAt(i);
    }
    return d;

2 个答案:

答案 0 :(得分:1)

现在是你的算法:

for each character:
  if it's not a digit, print it
  if it is a digit, print the digit itself "digit - 1" times

不理想。一些问题:

  • 打印数字,而不是前面的字母。使用charAt(i-1)
  • 您递增n,但从未将其重置为1。您应该在for循环中执行此操作。
  • 你确实应该打印n - 1次字母,因为它一次打印出来,所以这很好
  • 使用StringBuilder
  • 算法会因a14 - 2位数的计数而中断。

答案 1 :(得分:1)

public static void main(String[] args) {
    String compressedText = "a3b3";
    int i;
    int n = 1;
    String d = "";
    for (i = 0; i < compressedText.length(); i++) {
        if (Character.isDigit(compressedText.charAt(i))) {
            while (n < compressedText.charAt(i) - '0') {
                d += compressedText.charAt(i - 1);
                n++;
            }
            n = 0;
        } else {
            d += compressedText.charAt(i);
        }
    }

    System.out.println(d);
}

输出:

  

aaabbbb

2个问题:

d += compressedText.charAt(i - 1); // Take the previous character, no the '3'

n = 0; // Reset the counter

一些注意事项:

  • 使用StringBuilder进行循环连接

  • 这仅适用于单位数字(0 - 9)