Bom dia a todos, estou tentado resolver um exercicio que precisa definir se o conteudo de um TextField é um numero ou uma string.
Estou tentando utilizar o metodo isDigit, mas não estou conseguindo alguém pode me ajudar?
Cara, acho que essa validação pode ser mais otimizada. Tenta fazer algo assim:
try{
/* Recuperar o texto do JTextField */
String number = ...
new Integer(number);
} catch(NumberFormatException e) {
/* Ops...o texto informado no JTextField não é um número */
}
No momento da instanciação, dependendo do tamanho do número, você troca o objeto a ser instanciado. Por exemplo, trocar de Integer para Long.
[]'s.
O jeito correto (mais rápido e mais simples) de ver se uma string representa um valor numérico é criar uma função que tenta efetuar a conversão. Se a conversão for bem-sucedida, o valor é realmente numérico.
package exemplos;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.text.NumberFormat;
import java.text.ParseException;
import java.text.ParsePosition;
import java.util.Locale;
public class Numerico {
// Aqui estamos vendo se o valor é numérico e inteiro.
// Por incrível que pareça, esse é o método mais rápido em Java.
public static boolean isNumeric (String s) {
try {
Long.parseLong (s);
} catch (NumberFormatException ex) {
return false;
}
return true;
}
// Aqui estamos vendo se o valor é monetário (exemplo: 12.345,67)
// e em notação brasileira. A declaração de "brazilianCurrencyFormat"
// abaixo é um pouco complexa, mas é necessária para evitar problemas
// em servlets, JSPs e outros ambientes "multi-threaded".
private static ThreadLocal<NumberFormat> brazilianCurrencyFormat = new ThreadLocal<NumberFormat> () {
@Override protected NumberFormat initialValue() {
return new DecimalFormat ("#,##0.00", new DecimalFormatSymbols (new Locale ("pt", "BR")));
}
};
public static boolean isCurrency (String s) {
s = s.trim();
ParsePosition pos = new ParsePosition (0);
brazilianCurrencyFormat.get().parse(s, pos);
return pos.getIndex() == s.length();
}
public static void main(String[] args) {
System.out.println (isNumeric ("1234567")); // true
System.out.println (isNumeric ("abacaxi")); // false
System.out.println (isCurrency ("1.234,56")); // true
System.out.println (isCurrency ("1234,56")); // true
System.out.println (isCurrency ("45,234.56")); // false
System.out.println (isCurrency ("abacaxi")); // false
System.out.println (isCurrency ("2 palitos")); // false
}
}
Amigos, infelismente a otmização com try tem uma falha se o numero digitado for M34M ele aceita como String, sendo assim fica um pouco falho.
Testei minha função com “M34M” e retornou “false”, como esperado. Não tem alguma coisa errada?
Quando estou testando assim 3mm3 para retornar um numero e não uma string da certo, mas quando quero retornar uma String usando M33M da errado pois ele aceita o M33M como sendo uma String
O que é um número para você?
Pelo que estou imaginando, “3mm3” é uma string mas “m33m” é um número para você.
Pode dizer exatamente o que são números e strings para você? Defina direitinho e dê alguns exemplos.
Realmente estava deixando de lado a questão que strings são alfa numéricos, sendo assim o valor M33M e valido, obrigado pela ajuda!
Retirado do wikipédia
[quote]String
Em programação e em linguagens formais, uma cadeia de caracteres (também conhecida como string) é uma sequência ordenada de caracteres (símbolos) escolhidos a partir de um conjunto pré-determinado. Em programação, cada símbolo armazenado na memória é representado por um valor numérico. Uma variável declarada com tipo de dado cadeia geralmente armazena um número pré-determinado de caracteres.[/quote]
se quiser saber mais sobre ela da uma olhada nos link:
http://www.guj.com.br/java.artigo.103.1.guj
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html