View Full Version : [Java] Ajuda a verificar se é numero
Sky_Boy_ 04-03-2008, 12:49 Boas ppl...
Tou aqui com uma dificuldade neste prog...espero que alguem me possa ajudar..... o k kero verificar e se ao introduzir um codigo postal, os 4 caracteres a eskerda do hifen e os 3 a direita sao numeros.....
Obrigado desde ja a tods os que puderem ajudar
while(cp.length() != 8){
System.out.println("Código Postal: ");
try{
cp = teclado.readLine().trim();
}
catch(IOException ioe) {
System.err.println("Erro ao ler o teclado");
}
if (cp.length() == 8) {
if (cp.charAt(4) == '-') {
System.out.println("Temos hifen");
}
else{
cp="";
}
}
for(n=0; n<=3; n++){
if (cp.charAt(n) != isNumeric ) {
System.out.println("Introduza apenas caracteres numericos");
}
/*TODO: verificar se as restantes posições de
* código postal são algarismos...
*/
}
}
(Eu sei k isso ta mal mas colokei o isNumeric pa n m eskecer do k tenho de fazer.... :S)
Cumps
nao sei se há alguma função pra isso mas podes fazer a verificao deste modo:
(cp.charAt(n) >= '0' && cp.charAt(n) <= '9')
...atenção, não sei se o operador é &&.
cump's
O operador é &&, mas estás é fazer uma condição de uma String com outra String, e ela não sabe o valor numérico, portanto não te vai retornar grande coisa.
Mas podes fazer assim:
if(Character.isDigit(cp.charAt(n)))
System.out.println("Está tudo ok");
else
System.out.println("Introduza apenas caracteres numericos");
ou podes usar a library de RegEx.
Faz um parseInt e apanha a excepção NumberFormatException
String num_str = cp.substring(0,3)
try {
Integer.parseInt(num_str);
} catch (NumberFormatException ex) {
System.out.println("Not a number");
}
Mr. Brightside 04-03-2008, 14:43 Usa expressões regulares que é o mais simples nesta situação. :)
boolean cpValido = true;
do{
System.out.println("Código Postal: ");
try{
cp = teclado.readLine().trim();
}
catch(IOException ioe) {
System.err.println("Erro ao ler o teclado");
}
}while(cp.length() != 8);
if (cp.charAt(4) != '-') {
System.out.println("Não foi encontrado hifen");
cp="";
cpValido = false;
}
for(n=0; cpValido && n<=3 ; n++){
if (cp.charAt(n) <= '0' && cp.charAt(n) >= '9') {
System.out.println("Introduza apenas caracteres numericos");
cpValido = false;
}
}
for(n=5 ; cpValido && n<=8 ; n++){
if (cp.charAt(n) <= '0' && cp.charAt(n) >= '9') {
System.out.println("Introduza apenas caracteres numericos");
cpValido = false;
}
}
ps: usa a tag ["code"]["/code"] (sem "")
arkannis 04-03-2008, 16:09 Usa expressões regulares que é o mais simples nesta situação. :)
Wise post :x2:
Como substituir esses km de linha que aí puseram por uma só! :
//codPostal é a String com o codigo postal
boolean match = codPostal.matches("(\\d{4}-\\d{3})");
Sim, é só isto! :D
Por acaso não me lembrei de expressões regulares! Muito bem.
Já em muitas vezes me pouparam resmas de código.
Sky_Boy_ 04-03-2008, 16:57 boolean cpValido = true;
do{
System.out.println("Código Postal: ");
try{
cp = teclado.readLine().trim();
}
catch(IOException ioe) {
System.err.println("Erro ao ler o teclado");
}
}
while(cp.length() != 8);
if (cp.charAt(4) != '-') {
System.out.println("Não foi encontrado hifen");
cp="";
cpValido = false;
}
for(n=0; cpValido && n<=3 ; n++){
if (!(cp.charAt(n) <= '0' && cp.charAt(n) >= '9')) {
System.out.println("Introduza apenas caracteres numericos");
cpValido = false;
}
}
for(n=5 ; cpValido && n<=7 ; n++){
if (!(cp.charAt(n) <= '0' && cp.charAt(n) >= '9')) {
System.out.println("Introduza apenas caracteres numericos");
cpValido = false;
}
}
Ele assim faz o k eu kero...o problema e que nao consigo ke ele volte a pedir o cod postal, avançando logo para a localidade.....
obgd dd ja a tds pela ajuda
não achas mais fácil assim?
do{
System.out.println("Código Postal: ");
try{
cp = teclado.readLine().trim();
} catch(IOException ioe) {
System.err.println("Erro ao ler o teclado");
}
}
while(cp.length() != 8);
boolean cpValido = cp.matches("(\\d{4}-\\d{3})");
Quanto à outra dúvida não percebi o que queres fazer.
Sky_Boy_ 04-03-2008, 17:48 é assim eu kero k ele kando ñ introduzo correctamente o código postal me volte a pedir para o introduzir...
Sky_Boy_ 04-03-2008, 19:14 não achas mais fácil assim?
do{
System.out.println("Código Postal: ");
try{
cp = teclado.readLine().trim();
} catch(IOException ioe) {
System.err.println("Erro ao ler o teclado");
}
}
while(cp.length() != 8);
boolean cpValido = cp.matches("(\\d{4}-\\d{3})");
Quanto à outra dúvida não percebi o que queres fazer.
Corrige-me se estiver em erro....mas essa condição nao reconhece se se introduz numeros ou letras.... por exemplo.... se introduzir aaaa-aaa ou 1111-111 ele corre na mm...
Mr. Brightside 04-03-2008, 19:18 Corrige-me se estiver em erro....mas essa condição nao reconhece se se introduz numeros ou letras.... por exemplo.... se introduzir aaaa-aaa ou 1111-111 ele corre na mm...
http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html
"\d" apenas aceita algarismos. ;)
Sky_Boy_ 04-03-2008, 19:26 pois mas o meu prob e k mm ke eu insira AAAA-AAA ele passa a frente....n devia :S
arkannis 04-03-2008, 19:44 pois mas o meu prob e k mm ke eu insira AAAA-AAA ele passa a frente....n devia :S
Epá, eu testei a expressao regular que ali pus e funcionou para todos os casos possiveis!
Já agora, não estou a perceber bem para que é que queres esse codigo todo para ler do teclado.
Olha aqui a sugestao muito mais simples e bonita:
String codPostal = "";
Scanner sc = new Scanner(System.in);
do {System.out.print("Insira o código postal: ");
codPostal = sc.nextLine();
} while(!codPostal.matches("(\\d{4}-\\d{3})"));
Tenho quase a certeza que isto faz tudo o que tu queres.
Sky_Boy_ 04-03-2008, 19:53 Qd vieres a coimbra pago-te um copo xD
Problema resolvido
Obgd a todos
|