递归解压缩使用RLE压缩的字符串

时间:2014-12-09 18:36:29

标签: java recursion

我试图编写一个方法来解压缩使用RLE格式递归压缩的字符串。所以,我想要一个转换" 5a2 * 3h32"进入" aaaaa ** hhh222"。

输入:5a2 * 3h32

输出:aaaaa ** hhh222 - >这是正确的

输入:i24(应为:i44)

输出:线程中的异常" main" java.lang.NumberFormatException:对于输入字符串:" i"

所以基本上它并不像一个角色前面没有数字。但是,如果输入在字符串的末尾有一个单独的字符,则该方法可以正常工作。

我似乎无法解决这个问题。任何输入都会非常有用!

public static String decompress(String compressedText){
    char c = ' ';
    String temp;

    if(compressedText.length() != 1){
        c = compressedText.charAt(1);
    }if(compressedText.length() == 1){
        return compressedText;       
    }else if(compressedText.charAt(0) == '0' && compressedText.length() != 2){
        return decompress(compressedText.substring(2));
    }else if(compressedText.charAt(0) == '0' && compressedText.length() == 2){
        compressedText = "\0";
        return compressedText;
    }else if(Character.isLetterOrDigit(c) == true || Character.isLetterOrDigit(c) == false){
        int i = Integer.parseInt(compressedText.substring(0,1));
        i = i-1;
        temp = Integer.toString(i);
        return c + decompress(temp.concat(compressedText.substring(1)));
    }if(Character.isLetter(c) == false){
        c = compressedText.charAt(2);
        int i = Integer.parseInt(compressedText.substring(0,2));
        i = i-1;
        temp = Integer.toString(i);
        return c + decompress(temp.concat(compressedText.substring(2)));
    }
    return compressedText;
}

1 个答案:

答案 0 :(得分:0)

正如我评论问题是你的病情,我改变了一点,现在它正在运作:

public static String decompress(String compressedText){
    char c = ' ';
    String temp;

    if(compressedText.length() != 1){
        c = compressedText.charAt(1);
    }if(compressedText.length() == 1){
        return compressedText;       
    }else if(compressedText.charAt(0) == '0' && compressedText.length() != 2){
        return decompress(compressedText.substring(2));
    }else if(compressedText.charAt(0) == '0' && compressedText.length() == 2){
        compressedText = "\0";
        return compressedText;
    }else if(Character.isDigit(compressedText.charAt(0)) == true){
        int i = Integer.parseInt(compressedText.substring(0,1));
        i = i-1;
        temp = Integer.toString(i);
        return c + decompress(temp.concat(compressedText.substring(1)));
    }
    return compressedText.charAt(0)+decompress(compressedText.substring(1));
}

结帐在线版here