java - 字符串压缩到字符数组列表

标签 java

我有一个字符串,我正在将其压缩为带有计数的字符数组。我没有得到字符串中最后的字符数。

public class StringComp {

    public static void main(String[] args) {

        String st = "aaabbccaaaaadddd";
        ArrayList<Character> chars = new ArrayList<>();
        int count = 1;
        char ct;

        for(int i = 0; i < st.length() - 1; i++) {
            if(st.charAt(i) == st.charAt(i+1)) {
                count++;
            }else {
                ct = Integer.toString(count).charAt(0);
                chars.add(ct);
                chars.add(st.charAt(i));
                count = 1;  
            }
        }
        System.out.println(chars.toString());

    }

}

我的输出:

[3, a, 2, b, 2, c, 5, a]

我的输出应该是:

[3, a, 2, b, 2, c, 5, a, 4, d]

我似乎无法在我的代码中找到错误。

最佳答案

您应该在循环后添加最终计数:

...
for(int i = 0; i < st.length() - 1; i++) {
    if(st.charAt(i) == st.charAt(i+1)) {
        count++;
    }else {
        ct = Integer.toString(count).charAt(0);
        chars.add(ct);
        chars.add(st.charAt(i));
        count = 1;  
    }
}
ct = Integer.toString(count).charAt(0);
chars.add(ct);
chars.add(st.charAt(st.length()-1));

另请注意,将计数存储为单个字符并不是一个好主意。如果计数大于 9 怎么办?

关于java - 字符串压缩到字符数组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58275207/

相关文章:

java - 有没有办法为 *any* 枚举声明注释属性?

java - 如何在我的 android studio 应用程序中实现 TLS V1.1 和 V1.2?

java - 经过几次调试,断点不起作用

java - 使用 DynamoDBMapper 更新 map 属性中的现有条目

java - 使用 selenium 断言页面

java - eclipse启动错误信息,如何捕获它

java - 如何在主类中扩展JFrame和JPanel?

java - Java 中的简单堆栈实现不起作用

java - BufferedOutputStream 写入垃圾数据

java - 无法在 gradle 项目中运行测试,错误为 : 'Could not create the Java Virtual Machine'