我正在尝试使用递归技术来压缩字符串。我有一个代码适用于某些人,并给我一个像这样的错误线程中的异常"主" 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);
}
答案 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