[RESOLVIDO]Ajuda com strings!

13 respostas
T
class PessoaFisica {
	private String cpf;
	private static boolean validadorCPF;
	
	//set cpf
	public void setCPF(String cpf) {
					System.out.println(this.cpf);
		validaCPF(cpf);
			this.cpf = cpf;
		}
	
	public void validaCPF(String cpf) {
		//cpf = cpf.replaceAll(".", "").replaceAll("-", "");
			if (cpf.length() == 11) {
				setCPF(cpf);
				this.validadorCPF = true;
		}
	}
	
	public void getCPF() {
		System.out.println(this.validadorCPF);
		if (this.validadorCPF == true) {
			System.out.println("CPF validado.");
		}
		else {
			System.out.println("CPF invalido.");
		}
	}
}

class TesteCPF {
	public static void main(String[]args) {
		PessoaFisica cpf = new PessoaFisica();
		cpf.setCPF("teste");
		cpf.getCPF();
	}
}

Eu fiz a classe PessoaFisica na qual é pra setar um CPF, validar ele e depois mostrar o mesmo compilou direitinho e aparentemente ta certo, só que ao testar a classe eu criei o TesteCPF, mando setar um valor para o cpf só que por algum motivo ele não le o valor e apenas retorna como nulo. Alguem sabe oq pode ta errado?

PS. o setCPF eu já testei com numero de cpf mesmo e até mesmo com palavra como foi testado ai, inclusive comentei a linha pro replace dos pontos e - pensando que poderia ser o erro mas não mudo nada tb

13 Respostas

Rodrigo_Sasaki

estranho…

seu setCPF() chama seu validaCPF() que chama seu setCPF() que chama seu validaCPF() que chama seu…

entendeu onde quero chegar? hehehe

T

public void setCPF(String cpf) { System.out.println(this.cpf); //validaCPF(cpf); this.cpf = cpf; }

fiz essa pequena alteração só pra testar e por algum motivo continua retornando o valor do cpf como nulo ainda, sabe oq pode ser? =T eu entendi oq vc quis dizer vo tentar arrumar isso tb

e uma pequena dúvida, eu chamei o validaCPF, depois que ele terminar de rodar o validaCPF ele volta pro set? sem precisar ser chamado?

gabrielfrios

Manolo, onde vc está verificando se ele esta retornando nulo, no sysout no setCPF ?

lina
digaoneves:
estranho..

seu setCPF() chama seu validaCPF() que chama seu setCPF() que chama seu validaCPF() que chama seu....

entendeu onde quero chegar? hehehe

Pois é!

Sugiro que seu método validaCPF() retorne um boolean informando se o CPF é valido ou não (Apenas isso).

public boolean validaCPF(String cpf) {

   return (cpf.lenght() == 11);

}

A função do seu setCPF(String) seria realmente setar o CPF:

public void setCPF(String cpf) {

   this.cpf = cpf;

}

E ter uma função que retorne o seu CPF:

public String getCPF() {

   return (this.cpf);

}

Depois se você quiser, incrementar ainda mais seu código, trate exceção ou mostre uma msg, no método setCPF:

public void setCPF(String cpf) {

   if (validaCPF(cpf)) {
       this.cpf = cpf;
   }
   else {

       JOptionPane.showMessageDialog(null, "CPF Inválido");
   }

}

Tchauzin!

T

Sim, no system out ele ta retornando como nulo o valor

Consegui!

gabrielfrios

tira o this do cpf do sysout ou coloque o sysout depois do this.cpf = cpf

T

Alguem sabe me dizer onde que ta o problema dessa linha?

cpf = cpf.replaceAll(".", "").replaceAll("-", "");
Rodrigo_Sasaki

[quote=topz]Alguem sabe me dizer onde que ta o problema dessa linha?

cpf = cpf.replaceAll(".", "").replaceAll("-", "");

Não tem problema nenhum nela

T

Estranho, quando o cpf passa por ela ele volta vazio, sabe oq pode ser?

public void validaCPF(String cpf) { cpf = cpf.replaceAll(".", "").replaceAll("-", ""); if (cpf.length() == 11) { this.validadorCPF = true; } }

lina

[quote=topz]Alguem sabe me dizer onde que ta o problema dessa linha?

cpf = cpf.replaceAll(".", "").replaceAll("-", "");

Oi,

Mude para:

cpf = cpf.replaceAll("\\.", "").replaceAll("-", ""); System.out.println(cpf);

Ou então:

cpf1 = cpf1.replaceAll("[^0-9]", ""); System.out.println(cpf1);

Tchauzin!

T

[quote=lina]

topz:
Alguem sabe me dizer onde que ta o problema dessa linha?

cpf = cpf.replaceAll(".", "").replaceAll("-", "");

Oi,

Mude para:

cpf = cpf.replaceAll("\\.", "").replaceAll("-", ""); System.out.println(cpf);

Ou então:

cpf1 = cpf1.replaceAll("[^0-9]", ""); System.out.println(cpf1);

Tchauzin!

Agora funcionou! obrigado, só uma pergunta ele não reconhece simplesmente o “.” ? por isso que tem que colocar \. ?

gabrielfrios

Só o “.” em regex significa qualquer caracter, para representar o “.” vc precisa colocar .

lina

++

Criado 19 de abril de 2012
Ultima resposta 19 de abr. de 2012
Respostas 13
Participantes 4