feed twitter facebook LinkedIn facebook

Java » Validar si un dato es numerico en Java

diciembre 29, 2006 por Víctor Cuervo 70 Comentarios Imprimir Imprimir

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:

  1. String cadenaUno = "1234";
  2. String cadenaDos = "No soy un numero";

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:

  1. if (Comunes.isNumeric(cadenaUno))
  2. System.out.println(cadenaUno + " es un numero");
  3. else
  4. System.out.println(cadenaUno + " NO es un numero");
  5.  
  6. if (Comunes.isNumeric(cadenaDos))
  7. System.out.println(cadenaDos + " es un numero");
  8. else
  9. System.out.println(cadenaDos + " NO es un numero");

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:

  1. private static boolean isNumeric(String cadena){
  2. try {
  3. Integer.parseInt(cadena);
  4. return true;
  5. } catch (NumberFormatException nfe){
  6. return false;
  7. }
  8. }

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 Codigo
Descargar el código
Error en el Codigo
Error en el código
Foro sobre Java Básico
Foro sobre Java Básico
tags: , , , , , , , ,

Artículos relacionados:

70 comentarios »

RSS feed para los comentarios de esta entrada. TrackBack URI

1 2 3 7
  1. margie
    enero 2, 2007 #

    Es tan sencillo pero eficiente gracias

  2. cllach
    abril 16, 2007 #

    Breve y efectivo.
    Que pasa con cadenas que contienen puntos de millar y/o puntos comas de decimales, no es que sea un mundo, pero habria algun metodo tan sencillo como este …. ?

  3. Denis González
    abril 18, 2007 #

    Excelente …!!!
    Para doubles: quizás isNAN() o Double.parseDouble() aunque en realidad no los he probado.

  4. la desesperada
    abril 30, 2007 #

    Hola me gustaria saber si me pueden ayudar..necesto validar urgente como hacer para validar que una cadena tipeada por un usuario en un JTextField sea un float….ayudenme es urgente mi tesis es para el marte y no he validado eso
    help!!!

  5. xavier
    julio 22, 2007 #

    puede ser que el numero 12345678901 , me diga que no es numerico? un saludo

  6. Miguel Arcangel
    agosto 24, 2007 #

    Creo que este codigo es más sencillo:

    String miString = “767K68″;
    if(TipoIdent.trim().matches(“.*\\D+.*”))
    System.out.println(“NO ES NUMERO”);
    else
    System.out.println(“SI ES NUMERO =D”);

  7. Miguel Arcangel
    agosto 24, 2007 #

    Jejeje perdon en olvidé reemplazar a TipoIdent con miString, pero igual funciona. Y aprovecho para explicar la expresión regular

    .* = 0 o más ocurrencias de cualquier caracter
    \D+ = 1 o más ocurrencias de un caracter que no es un digito
    .* = 0 o más ocurrencias de cualquier caracter

    En resumen, esto quiere decir que String.matches regresará verdadero si en el String evaluado se encuentra con una o más ocurrencias de un caracter que NO es númerico

    Saludos

  8. paul
    septiembre 22, 2007 #

    hola q tal a todos…recien esoty aprendiendo a diseñar paginas wb y quisiera saber como validar los caracteres y la tilde pero no los numeros al momento de ingresar en una ventana de usuario, de igual manera para la la ventana de ingresar correo (validar el @ , el “.”(punto) y que no acepte el “@” al cominenzo )

  9. Asclepios from Egipt
    septiembre 28, 2007 #

    Oyeme lo probe y esta excelente, sencillo y eficiente. El unico inconveniente es que cuando se digita un numero double 23.5 por ejemplo, no lo reconoce como numero asi que en lugar de evaluar el String como parseInt traten evaluandolo con Double.parseDouble(String) funciona igual con la diferencia de que ahora si funciona para todos los numeros ;)

  10. Elamo!
    octubre 5, 2007 #

    Muy buen aporte, me costo hcerlo, pero es que soy muy noob (thnx) ^^

1 2 3 7

Deja un comentario

XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*