uso do charAt()
bom dia,
estou com um probleminha...... preciso percorrer uma string e comparar seus valores, para isso tenho q usar o metodo charAt(), porem estou enfrentando alguns probleminhas...................abaixo segue o codigo:
boolean achou_arroba, achou_ponto = false;
for(int i = 2; i <= txtEmail.getText().trim().length()-1;i++){
if(txtEmail.getText().trim().charAt(i) == "@"){
achou_arroba = true;
for(int j = i+1; j <= txtEmail.getText().trim().length()-1; j++){
if(txtEmail.charAt(j) == "."){
achou_ponto = true;
}
}
}
}
como podem ver, coloquei as comparacoes de forma diferente, mas é proposital e ai segue os erros:
o primeiro fala:
operator == cannot be applied to char,java.lang.String, entao mudo para equals() e ai: char cannot be dereferenced e o segundo erro e:
cannot resolve symbol method charAt (int), se alguem puder me dar uma força agradeço......
GAbriel

Gfilho
Curtidas 0
Respostas

João Bier
09/04/2009
tente assim:
[]'s
:!:
boolean achou_arroba, achou_ponto = false; for(int i = 2; i <= txtEmail.getText().trim().length()-1;i++){ if(txtEmail.getText().trim().charAt(i) == '@'){ achou_arroba = true; } }
GOSTEI 0

Rodrigo_corinthians
09/04/2009
O primeiro erro acontece porq vc usa as "" na condição, charAt retorna um "char", use as '' simples.
***
***
public class ClasseMain { public static void main(String[] javaFree) { String email = "contato@javafree.com.br"; boolean achouArroba = false, achouPonto = false; if(email != null && email.length() > 0){ for(int i = 0; i < email.length(); i++){ if(email.charAt(i) == '@'){ achouArroba = true; } if(email.charAt(i) == '.'){ achouPonto = true; } } } System.out.println(achouArroba); System.out.println(achouPonto); } }
GOSTEI 0

Gfilho
09/04/2009
valeu galera, era isso mesmo................... muito obrigado
GOSTEI 0

Camillo Borges
09/04/2009
só um cometário...
Isso daqui
[b]i <= txtEmail.getText().trim().length()-1[/b]
é feio...
usa assim que fica mais bonito...
[b]i < txtEmail.getText().trim().length()[/b]
GOSTEI 0

Gfilho
09/04/2009
Obrigado pela dica, estou iniciando.............. em java......, mas só uma coisa, isso é apenas uma questao de estetica né? pq na pratica a performance continua a mesma certo?
de qq forma estou alterando o meu codigo......
valeu
GAbriel
GOSTEI 0

Junior.esnaola
09/04/2009
[quote="gfilho"]Obrigado pela dica, estou iniciando.............. em java......, mas só uma coisa, isso é apenas uma questao de estetica né? pq na pratica a performance continua a mesma certo?
de qq forma estou alterando o meu codigo......
valeu
GAbriel
com certeza é só estética mas você mesmo vai se achar bem mais fácil padronizando seu código
exemplo: no teu código postado tem 2 for, um começa em 1 outro começa em 2.
tenta sempre padronizar o código,a não ser q não dê, no exemplo citado comece os for's' com 0 (sempre) pra ti te achar melhor.
[]s
GOSTEI 0

Gfilho
09/04/2009
ok, eu entendi.................. mas entao, no meu codigo eu começo um em dois que no caso a terceira posicao do length(), com isso eu forço o usuario a informar um email com pelo menos dois caracteres antes do @ e o segundo for inicio 1 possicao apos o @, assim o user nao podera digitar email@.com por exemplo.......
até +
Gabriel
GOSTEI 0

Camillo Borges
09/04/2009
Tipo, esta diferenca até influencia na performance, mas é uma coisa muuuuuuuinto insignificante... na verdade da forma que postei:
i < txtEmail.getText().trim().length()
o processador só testa se "i" é menor que "txtEmail.getText().trim().length()",
da sua forma ele processa
primeiro ele precisa ver se "i" é menor [b]ou igual[/b] ao [b]resultado[/b] de "txtEmail.getText().trim().length()" - 1... compreendeu? mas esso é milésimos de milésimos de segundos em um processador moderno...
GOSTEI 0

Asdfasdfa
09/04/2009
Se tu nao for fazer essa comparacao milhares de vezes para justificar o charAt eu faria assim.
]['s
boolean existe = true; if (txtEmail.getText().indexOf("@") == -1) { existe = false; }
GOSTEI 0