public static String compress(String original) {
int count = 1;
char currentChar = original.charAt(0);
String newString = "";
for (int x = 1; x < original.length(); x++) {
if (currentChar == original.charAt(x)) {
count++;
} else {
if (count == 1) {
newString += Character.toString(currentChar);
} else {
newString += Integer.toString(count) + Character.toString(currentChar);
}
count = 1;
}
currentChar = original.charAt(x);
}
return newString;
}
我上面的代码应该使用 RLE 对字符串进行编码,因此如果字符串是 sssWWwRttty
,程序应该返回 3s2WwR3ty
。我遇到的问题是返回值忽略了字符串中的最后一个字符。例如,如果压缩方法的参数是 sssWWwRttty
,则返回值将是 3s2WwR3t
,或者如果参数是 qwwwEErtttyyyyy
,则返回值将是q3w2Er3t
。有没有人看到我可能遗漏了一些东西以排除字符串的那部分?
最佳答案
您永远不会在循环的最后一次运行中将 currentChar
添加到 newString
。
为了提高性能,我强烈建议在 StringBuilder
中构建结果,而不是附加到 String
。附加到 String
总是会创建一个新的 String-Object,这会花费时间并导致创建大量对象。
关于java - java程序的运行长度编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40359555/