Método Formatar CEP

Pessoal,

To realizando a manutenção em um sistema não criado por mim. Criaram um método para formatar o CEP da seguinte maneira:

Esse NUM_OITO é uma constante. O mesmo para NUM_CINCO.

O problema é que quando chamo um relatório, o campo CEP está vindo em branco (no relatório PDF) somente para CEP iniciado com 0 (zero). Percebi na seguinte linha (if (c.length() != NUM_OITO)) do método que o erro pode estar ali. Parece que ele está desprezando este primeiro 0 (zero). Alguém conhece uma forma dele não desprezar este 0???

Desde já agradeço!

acho que o problema está na sua variavel cep, já que ela é do tipo long ele remove todos os zeros a esquerda. vc deveria colocar essa variavel como string

Alterei para String mas continua dando o mesmo problema. O cep continua não aparecendo. Somente para os cep’s iniciados com 0 (zero). Os demais cep’s que não iniciam com 0 (zero), continuam aparecendo normal após a alteração. O código ficou da sguinte forma:

public static String formatarCep(String cep) {
		if (cep.equals("0")) {
			return null;
		}

		String c = cep;

		if (c.length() != NUM_OITO) {
			return "";
		}

		return c.substring(0, NUM_CINCO) + "-" + c.substring(NUM_CINCO, c.length());
	}

Ele ainda continua desprezando o 0 (zero). Ex: cep: 02566-130 ---- O sistema entende da seguinte forma 2566-130

Vê se isso resolve.

public static String formatarCep (long cep) {
    long cep1, cep2;
    cep1 = cep / 1000;
    cep2 = cep % 1000;
    return String.format ("%05d-%03d", cep1, cep2);
}

o cep está vindo de onde? do banco? se sim no banco ele está salvo com ou sem zero? caso venha da tela trate ele o tempo todo como string não converta ele em nenhum momento para long integer ou algo parecido

Velho, já passei por isso. E pode ser que a minha solução te ajude.
No meu caso estava salvando em uma base de dados ORACLE e a coluna era um NUMBER.
O que acontecia, você passava o cep 0xxxx-xxx e o banco armazenava como xxxxxxx, por ser um NUMBER ele removia o ZERO da frente. Pode ser isso.
Caso for isso, faz uma validação se o length da tua variável ( te aconselho a converter para String como os demais colegas comentaram) e adiciona o ZERO na frente.
Faz tempo que fiz isso, mas se não me engado, todo o estado de São Paulo tem o ZERO na frente do cep.
O que fiz foi algo assim:

[code]String cep = “valor da coluna no DB”;

if(cep.legth ==7){
cep = “0” + cep;
}[/code]

Não sei te dizer se existe algum estado brasileiro que tenha mais de um CEP na esquerda. A aplicação que fiz ainda está funcionando e não deu pau ainda heuheuheuh

Abraço e espero te ajudado.
OBS: Notei que o tópico é antigo, mas vai que alguém ainda precise da solução e como não foi marcado como removido ainda o tópico, resolvi postar.