compressão RLE

Elaborei um código para comprimir uma String mas existe uma falha que não consigo resolver

exemplo:
entrada:fffeeer
Saida:3f3e1f

Mas se a entrada for: fffeeere
O erro acontece na saida que deveria ser: 3f4e1r mas é 3f3e1f1e

Segue o código… agradecimentos antecipados pela atenção:

import javax.swing.*;

public class MetodoRle{
	
	public static void main(String args[]){
	//	String ent = "AAAAABBBCC";
		String ent = JOptionPane.showInputDialog("Digite a String a ser compactada:");
		ent = compactarEntrada(ent);
		JOptionPane.showMessageDialog(null,ent);
		
	}
	
	public static String compactarEntrada(String entrada){
		int tamanho=1;
		String resp="";
		char anterior  = entrada.charAt(0);
		int i=1;	
		while (i<entrada.length())
		{
			if (entrada.charAt(i) == anterior)
				tamanho++;
			else
			{
				resp+= tamanho;
				resp+=anterior;
				anterior = entrada.charAt(i);
				tamanho = 1;
			}
			i++;
		}
		resp+=tamanho;
		resp+=anterior;
		return resp;
	}
	

}

Eu compilei o seu código e testei,
para a entrada fffeeere a saída foi 3f3e1r1e.
Isso aconteceu porque o seu código compara o atual apenas com o anterior. Para que a saída seja 3f4e1r você precisa verificar cada caractere com toda a String.
Mais não entendo o problema com a saída 3f3e1r1e porque ela permite que você descompacte a string, diferente da saída 3f4e1r.

http://pt.wikipedia.org/wiki/Codifica%C3%A7%C3%A3o_Run-length
http://www.souzamonteiro.com/wiki/images/2/21/Algoritmos_de_compressao.pdf