Java 递归解压缩使用RLE压缩的字符串
我正在尝试编写一个方法,对使用RLE格式递归压缩的字符串进行解压缩。所以,我想要一个将5a2*3h32转换为AAAA**HH222的方法 输入:5a2*3h32 输出:aaaaa**hh222->这是正确的 输入:i24应为:i44 输出:线程主java.lang.NumberFormatException中的异常输入字符串的异常:i 所以基本上它不喜欢字符前面没有数字。但是,如果输入在字符串末尾有一个单独的字符,则该方法可以正常工作 我似乎无法理解这一点。任何输入都会非常有用Java 递归解压缩使用RLE压缩的字符串,java,recursion,Java,Recursion,我正在尝试编写一个方法,对使用RLE格式递归压缩的字符串进行解压缩。所以,我想要一个将5a2*3h32转换为AAAA**HH222的方法 输入:5a2*3h32 输出:aaaaa**hh222->这是正确的 输入:i24应为:i44 输出:线程主java.lang.NumberFormatException中的异常输入字符串的异常:i 所以基本上它不喜欢字符前面没有数字。但是,如果输入在字符串末尾有一个单独的字符,则该方法可以正常工作 我似乎无法理解这一点。任何输入都会非常有用 public s
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;
}
正如我所评论的,问题出在你的身体状况上,我稍微改变了一下,现在它开始工作了:
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));
}
签出在线版本。我建议您编写单元测试,并找到最简单的不起作用的示例,然后在调试器中逐步查看代码以找出原因。这一行是什么?否则ifCharacter.isLetterOrDigitc==true | | Character.isLetterOrDigitc==false