public static String decompressString (String text) {
int count = 0;
StringBuilder result = new StringBuilder () ;
for (int i = 0; i < text.length(); i++) {
char c = text.charAt(i);
if (Character.isDigit(c)) {
count = count * 10 + c - '0';
} else {
while (count >0){
result.append(c);
count--;
}
}
}
return result.toString();
}
该程序应该从主方法(如5A5Bcd)中获取行程长度编码的字符串,并以运行长度解码格式返回该字符串。 5A5Bcd - > AAAAABBBBBcd。我遇到的问题是代码似乎忽略了不在数字前面的字符。在上面的例子中,我返回AAAAABBBBB而不是AAAAABBBBBcd; 'c'和'd'之前没有数字,因此无法识别。任何想法,我现在已经停留了相当长的一段时间。
当您在示例中遇到“c”和“d”字符时,您的count
变量不会非零,因为在处理“5B”后它将减少为零。
我在代码中看到的最简单的修复是在while
循环之前添加一个检查:
if (Character.isDigit(c)) {
// ...
} else {
if (count == 0) {
// Single-run-length characters have an implicit "1" prepended
count = 1;
}
while (count > 0) {
// ..
}
}
无论何时开始处理新字符,count都为0,因此不会附加任何内容。您希望在循环开始时count为1,并在while(count> 0)循环后将其设置为1。你能解释为什么你做count = count * 10 + c - '0';而不是count = c(这也必须改变)?