递归地解压缩字符串

时间:2014-12-05 06:01:13

标签: java string recursion

我正在尝试使用递归技术来压缩字符串。我有一个代码适用于某些人,并给我一个像这样的错误线程中的异常"主" java.lang.NumberFormatException:对于输入字符串:""

例如,当我发送像4a4b4c或40A5B10c这样的字符串时,它工作得非常好。当使用字符串类似于" a9T3b5R6t3h2g4v5b4n"

时出现错误

这是我的代码

public static  void main(String[] args){
    System.out.println(uncompress("a9T3b5R6t3h2g4v5b4n"));
}

public static String uncompress(String Text){
    return uncompress(Text, "", "");
}

public static String count(char ch, int n){
        if(n == 0){return "";}
        return "" + ch + count(ch, n-1);
    }

public static String uncompress(String Text, String count, String output){
    if(Text.equals("")){
        return output;
    }
    if(Character.isLetter(Text.charAt(0))){
        output += count(Text.charAt(0), Integer.parseInt(count));
        count = "";
    }
    else if(Character.isDigit(Text.charAt(0))){
        count += ("" + Text.charAt(0));
    }


    return uncompress(Text.substring(1), count, output);
}

2 个答案:

答案 0 :(得分:1)

我认为你得到异常java.lang.NumberFormatException,因为如果字符串以字母开头,则代码到达

if(Character.isLetter(Text.charAt(0))){
    newString += count(Text.charAt(0), Integer.parseInt(count));
    count = "";
}

阻止,您尝试解析count,因为使用""调用了第一次解压缩,其值为return uncompress(Text, "", "");

总之,该代码只能处理以数字开头的压缩字符串。也许您可以先尝试验证输入的压缩字符串以避免异常。

答案 1 :(得分:1)

只需处理NumberFormatException(NFE),然后在第一个输入是字符串然后保留它的情况下放置替代解决方案。我不太确定我的解释是否可以纠正。只是想帮忙。 TIA。

public static  void main(String[] args){
    System.out.println(uncompress("abasd4a4b4c"));
}

public static String uncompress(String text){
    return uncompress(text, "", "");
}

public static String count(char ch, int n){
        if(n == 0){return "";}
        return "" + ch + count(ch, n-1);
    }

public static String uncompress(String text, String count, String output){
    if(text.equals("")){
        return output;

    }else if(Character.isLetter(text.charAt(0))){
        try{
            output += count(text.charAt(0), Integer.parseInt(count));
        }catch(NumberFormatException nfe){
            output += text.charAt(0);
        }
        count = "";
    }else if(Character.isDigit(text.charAt(0))){
        count += ("" + text.charAt(0));
    }
    return uncompress(text.substring(1), count, output);
}

输出:

abasdaaaabbbbcccc