Java » Validar si un dato es numerico en Java
Navegando por los diferentes foros de la red me encuentro con la siguiente pregunta. ¿Cómo puedo validar si un dato es numerico en Java? A uno le puede parecer una pregunta muy básica y típica de alguien que ni siquiera se ha leido la documentación, pero la cuestión es que es una duda que existe.
De hecho, la gente busca el método isNumeric(String). Que, a día de hoy, no existe dentro de las APIs de Java, si bien, si que existe en algunas otras librerias de renombre, como puede ser en Apache Commons, en concreto org.apache.commons.lang.StringUtils.isNumeric().
Y es que en muchos casos nos vamos a encontrar con origenes de datos, donde de una forma explicita no vengan definidos como numeros. Esta claro que una base de datos que alberga enteros lleva la validación implicita, que un WebService (o un simple método Java) identificará los campos como numéricos,... Pero que sucede si estamos leyendo un fichero. Este de forma implicita no lleva ninguna validación. Es en este tipo de casos donde será bueno el realizar este tipo de validaciones. (Cierto es que podríamos realizar una lectura directa sobre enteros).
Para poder resolver esta duda la idea es la siguiente. Partimos de las dos siguientes variables:
Ahora tenemos que codificar el método isNumeric(String), el cual podemos utilizar a posteriori para validar las cadenas. Esto lo haremos de la siguiente forma:
if (Comunes.isNumeric(cadenaUno)) else if (Comunes.isNumeric(cadenaDos)) else
El método isNumeric(string) se apoyará en la clase Integer. La idea consiste en transformar la cadena en un número. En el caso de que resulte bien, es que la cadena es un número (obvio), si falla, es que nuestra cadena no será un número.
isNumeric será un método estático de la clase Comunes. Es por ello que su utilización es la de Comunes.isNumeric(String).
El método de Integer que nos permite transformarlo en numerico es .parseInt(String). Si va bien devuelve el entero, sino genera la excepción NumberFormatException. De esta forma nuestro método quedará de la siguiente forma:
try { return true; return false; } }
Este método es válido para ciertos propositos, pero no tenemos que olvidar que existen números más grandes que deberían de ser tratados con clases como Long o Double. Es decir, que nuestro método isNumeric(String) podría ser un poco más complejo.
Desde aquí animo a que alguien genere la posibe implementación, y lo publicaremos en Linea de Codigo.
![]() Descargar el código |
![]() Error en el código |
![]() Foro sobre Java Básico |
Artículos relacionados:









Julio 12, 2010 #
Hola alguien me puede decir como puedo validar una caja de textos que permitan insertar valores float o double
Julio 26, 2010 #
KeyListener ValidaNumerico = new KeyListener() {
public void keyTyped(KeyEvent e) {
char caracter = e.getKeyChar();
if(((caracter ’9′ ))&& (caracter != KeyEvent.VK_BACK_SPACE))
{
e.consume();
}
}
public void keyReleased(KeyEvent e) {
}
public void keyPressed(KeyEvent e) {
}
};
Septiembre 5, 2010 #
Miguel Arcangel,
Eres un agel, Gracias, Muchas garcias por tu codigo…
Septiembre 30, 2010 #
FALTARIA VALIDAR CUANDO EL STRING VIENE DE LA SIGUIENTE FORMA: 123E4, LO CUAL PASA COMO UN NUMERO CORRECTO, PERO CONTIENE LETRAS, LO CUAL ESTARIA MAL.
Mayo 3, 2011 #
Miguel Arcangel tu programa es bueno pero no aceptaria los numeros negativos por eso seria mejor usar el de Victor Cuervo.
Y ya con lo del parse para los Doubles aceptaria los numeros decimales.
Ademas de que contaria con atrapar las excepciones cuando se salga del limite del tipo.
Enero 2, 2012 #
segun lo que veo es un valor estatico, como se haria en un vector de tamaño 10 en el cual cada uno de susdatos deven ser evaluados para ver si son numero o no
espero su respuesta pronto
Enero 3, 2012 #
@ARANA,
Defines un array:
String[] datos = {"12344,"cadena","34","0","hola"};Y lo recorrer mientras llamas a la función isNumeric:
for (int x=0;x<datos.length;x++) { if (Comunes.isNumeric(datos[x])) System.out.println(datos[x] + " es un numero"); else System.out.println(datos[x] + " NO es un numero"); }Espero que te sirva de ayuda.