Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否从rle输出中排除单个字符? 公共静态字符串压缩(字符串原始){ StringBuffer dest=新的StringBuffer(); 对于(int i=0;i_Java_Compression - Fatal编程技术网

Java 是否从rle输出中排除单个字符? 公共静态字符串压缩(字符串原始){ StringBuffer dest=新的StringBuffer(); 对于(int i=0;i

Java 是否从rle输出中排除单个字符? 公共静态字符串压缩(字符串原始){ StringBuffer dest=新的StringBuffer(); 对于(int i=0;i,java,compression,Java,Compression,大家好,我有一个代码块,用于使用RLE算法压缩短语的方法。我很难弄清楚如何使该方法排除对输出中的单个字符应用RLE压缩 此时,如果用户输入“fffggttth”,则代码输出“3f3g3t1h”,但我希望输出不影响h,因此它将只是“3f3g3th” 我觉得解决方案包括在for块之前使用break或continue语句,但我可能错了。谢谢 以下是您的问题的一个简单答案: public static String compress(String original) { StringBu

大家好,我有一个代码块,用于使用RLE算法压缩短语的方法。我很难弄清楚如何使该方法排除对输出中的单个字符应用RLE压缩

此时,如果用户输入“fffggttth”,则代码输出“3f3g3t1h”,但我希望输出不影响h,因此它将只是“3f3g3th”


我觉得解决方案包括在for块之前使用break或continue语句,但我可能错了。谢谢

以下是您的问题的一个简单答案:

    public static String compress(String original) {
    StringBuffer dest = new StringBuffer();
    for (int i = 0; i < original.length(); i++) {
        int runLength = 1;
        while (i+1 < original.length() && original.charAt(i) == original.charAt(i+1)) {
            runLength++;
            i++;
        }
        dest.append(runLength);
        dest.append(original.charAt(i));
    }
    return dest.toString();
}

简单地说,如果一个字符出现多次,它只会增加连续出现的次数。如果字符在一行中仅出现一次,则不会追加长度(即1)。确保在解压缩方法中考虑到1没有出现。

当您说确保1没有出现时,您的意思是添加一个错误条件,即如果其压缩量为1,则忽略该操作?例如,“aaabcc”将压缩为“3ab2c”。解压缩时,“3a”表示替换为“aaa”,“b”前面没有数字表示保留为一个“b”,而“2c”则替换为“cc”。只要确保你有一个案例,如果一个字符前面没有数字,假设它只是该字符的一次出现。
if(runLength > 1) dest.append(runLength);