我试图编写一个方法来解压缩使用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;
}
答案 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。