Вместо строки Buffer вы можете использовать карту, это будет намного проще и понятнее.
public static void main(String[] args) {
String input = "AAAAABBBBCCCCCCCCAAABBBDDCCCC";
int counter=1;
for(int i=1; i<input.length(); i++) {
if(input.charAt(i-1)==input.charAt(i)) {
counter=counter+1;
}else if(input.charAt(i-1)!=input.charAt(i)){
System.out.print(counter+Character.toString(input.charAt(i-1)));
counter=1;
}if(i==input.length()-1){
System.out.print(counter+Character.toString(input.charAt(i)));
}
}
}
Это даст
5A4B8C3A3B2D4C
ОБНОВЛЕНИЯ
Я согласен с @WJS, если строка содержит число, выход которого становится грязным, следовательно, если System.out в вышеприведенном коде будет заменен ниже, т.е.
System.out.print(Character.toString(input.charAt(i-1))+"="+counter+" ");
, то для ввода типа
AAAAABBBBCCCCCCCCAAABBBDD556677CCCCz
мы выходим, как показано ниже
A=5 B=4 C=8 A=3 B=3 D=2 5=2 6=2 7=2 C=4 z=1