[RESOLVIDO]Ajuda com strings!

[code]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();
}
}[/code]

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

estranho…

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

entendeu onde quero chegar? hehehe

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?

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

[quote=digaoneves]estranho…

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

entendeu onde quero chegar? hehehe[/quote]

Pois é!

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

[code]public boolean validaCPF(String cpf) {

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

}[/code]

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

[code]public void setCPF(String cpf) {

this.cpf = cpf;

}[/code]

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

[code]public String getCPF() {

return (this.cpf);

}[/code]

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

[code]public void setCPF(String cpf) {

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

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

}

}[/code]

Tchauzin!

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

Consegui!

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

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

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

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

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

Não tem problema nenhum nela

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; } }

[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!

[quote=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![/quote]

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

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

++