在Java中压缩字符串

时间:2014-11-18 01:22:14

标签: java

不确定为什么我的代码不起作用。如果我输入qwwwwwwwwweeeeerrtyyyyyqqqqwEErTTT,我应该qw9w5e2ry5y4qE2ET3T获得q9w5e2rt5y4qw2Er3T

行程编码(RLE)是一种简单的压缩算法" (一种算法,它采用一个数据块并减小其大小,生成一个在较小空间中包含相同信息的块)。它的工作原理是用短的标记替换相同数据项的重复序列"代表整个序列。将RLE应用于字符串涉及在字符串中查找重复相同字符的序列。每个这样的序列都应该被一个"令牌"包括:

序列中的字符数 重复的角色 如果一个角色没有重复,则应该单独留下。

例如,请考虑以下字符串:

qwwwwwwwwweeeeerrtyyyyyqqqqwEErTTT

应用RLE算法后,此字符串将转换为:

q9w5e2rt5y4qw2Er3T

在压缩字符串中,"9w"表示9个连续小写"w"字符的序列。 "5e"代表5个连续的小写"e"字符等。

编写一个以字符串作为输入的程序,使用RLE压缩它,并输出压缩的字符串。大小写 - 大写和小写字符应视为不同。您可以假设输入字符串中没有数字字符。输入没有其他限制 - 它可能包含空格或标点符号。没有必要将非字母字符与字母区别对待。

    public class Compress{
    public static void main(String[] args){
        System.out.println("Enter a string: ");
        String str = IO.readString();
        int count = 0;
        String result = "";

        for (int i=1; i<=str.length(); i++) {
            char a = str.charAt(i-1);
            count = 1;

            if (i-2 >= 0) {
            while (i<=str.length() && str.charAt(i-1) == str.charAt(i-2)) {
                count++;
                i++;
            }
            }
            if (count==1) {
                result = result.concat(Character.toString(a));
            }
            else {
                result = result.concat(Integer.toString(count).concat(Character.toString(a)));
            }
        }
        IO.outputStringAnswer(result);
    }
}

1 个答案:

答案 0 :(得分:0)

我会从零开始,并期待:

public static void main(String[] args){
    System.out.println("Enter a string: ");
    String str = IO.readString();
    int count = 0;
    String result = "";

    for (int i=0; i < str.length(); i++) {
        char a = str.charAt(i);
        count = 1;

        while (i + 1 < str.length() && str.charAt(i) == str.charAt(i+1)) {
            count++;
            i++;
        }

        if (count == 1) {
            result = result.concat(Character.toString(a));
        } else {
            result = result.concat(Integer.toString(count).concat(Character.toString(a)));
        }
    }

    IO.outputStringAnswer(result);
}

一些输出:

qwwwwwwwwweeeeerrtyyyyyqqqqwEErTTT => q9w5e2rt5y4qw2Er3T
qqwwwwwwwweeeeerrtyyyyyqqqqwEErTTT => 2q8w5e2rt5y4qw2Er3T
qqwwwwwwwweeeeerrtyyyyyqqqqwEErTXZ => 2q8w5e2rt5y4qw2ErTXZ
aaa => 3a
abc => abc
a => a