java - java程序的运行长度编码

标签 java string algorithm encoding

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/

相关文章:

java - 为什么我在一个全新的 webapp-javaee7 项目中出错

java - onActivityResult byte[] data 不管图片多大都返回null

java - 检查字符串以查看 Java 中添加的内容

c - 使用 sscanf 多次读取字符串

algorithm - 从 O(n * log(log(n))) 中的最大堆构建排序列表?

php - 具有多项分配的 PHP 中的匈牙利算法

java - OkHttpClient 与 Java Future java.io.InterruptedIOException

c# - 组合 C# String.Format 格式选项

c++ - 在 C++ 中查找两个索引之间的子字符串

algorithm - 如何制作更快的算法