在java中压缩字符串

问题描述

请帮忙写下面的java代码
当我输入时,例如 aabbcccd, 输出是 99100102d,但它应该是 a2b2c3d。 谁能告诉我这段代码有什么错误? (此代码尝试捕获输入和输出特定字符的输入频率)

import java.util.*;

public class Main {

    public static void main(String args[]) {
        try {
            Scanner scn = new Scanner(system.in);
            String s = scn.nextLine();                     // taking input
            StringBuilder str = new StringBuilder(s);              
            StringBuilder str_new = new StringBuilder();

            int i = 0 ;
            while (i < str.length()) {
                int count = 1; 
                while (i < str.length()-1 && str.charat(i) == str.charat(i+1)){
                    count += 1;
                    i++;
                }
                if (count == 1)
                    str_new.append(str.charat(i));
                else
                    str_new.append(str.charat(i) + (char)count);
                i++;
            }
            System.out.println(str_new);
        } catch (Exception e) {
            return;
        }
    }
}

解决方法

在问题来自str.charAt(i) + (char)count,因为它们是2个字符,它们与总结了他们的int的值,


解决,通过使用连续的append()呼叫

str_new.append(str.charAt(i)).append(count);

可以通过使用外for-loop,并在append,以及增量只有i在内部while通过保存{{1的三元操作者减少代码}}之前

i