如何实现aaabbbsdd转换成3a3bs2d

如何实现aaabbbsdd转换成3a3bs2d
我刚开始的思路是用正则表达式
先切割然后替换,可是写不出来。
希望大家能写出来参考一下、谢谢。或者给个伪代码。

[code="java"]
public class StringZip {

public static void main(String[] args) {

    StringBuilder sb = new StringBuilder();
    Stack stack = new Stack();

    for (char c : "aaabbbsdd".toCharArray()) {
        stack.push(c, sb);
    }
    stack.append(sb);

    System.out.println(sb);
}

static class Stack {

    private int count = 1;
    private Character chr;

    public void push(char c, StringBuilder sb) {

        // 初次。
        if (chr == null) {
            chr = c;
            return;
        }

        // 相同则+1。
        if (chr == c) {
            count++;
            return;
        }

        // 不同则输出。
        append(sb);

        // 重置。
        chr = c;
        count = 1;
    }

    public void append(StringBuilder sb) {
        if (count > 1) {
            sb.append(count);
        }
        sb.append(chr);
    }
}

}
[/code]

[code="java"]public static void main(String[] args) {
char[] chars = "aaabbbsdd".toCharArray();
StringBuilder s = new StringBuilder();

    int count = 0;
    for(int i = 0, l = chars.length; i < l; i++) {
        char ch = chars[i];

        //如果不是最后一个 判断当前的 是否和下一个匹配 如果匹配count+1 继续下一轮
        if( i + 1 < l && chars[i+1] == ch) {
            count++;
            continue;
        }

        //如果是最后一个 判断最后一个 是否和前一个匹配 如果匹配count+1 
        if(i + 1 == l && chars[i - 1] == ch) {
            count++;
        }

        s.append(ch);
        if(count > 1) {
            s.append(count);
        }
        count = 0;
    }

    System.out.println(s.toString());



}[/code]

1、转换字符串为字符数组循环。
2、设置计数单位变量 i,设置待比较字符变量 c;
3、循环字符数组,取当前字符c,循环比较,如果和下一个相同,计数变量i加1,否则清零重新计数;