Validar si un dato es numérico en Java

29/dic/2006 Java , , , 70 Comentarios
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:

  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.

Vídeos sobre Java Básico

Difunde el Conocimiento

Si te ha gustado el artículo o te ha sido de utilidad, no dejes de compartirlo con tus amigos en las redes sociales... Te estaremos muy agradecidos. :-D

70 comentarios en “Validar si un dato es numérico en Java”

Víctor Cuervo

Acke

Hola, me sirvio mucho esta info (: !

Víctor Cuervo

gabo

Muchas gracias, tenia tiempo buscando como hacer esto ^-^

Víctor Cuervo

Engel

Hola es muy útil tu info, pero si lo quiero al contrario, me explico, que no me acepte numeros, solo letras del alfabeto. ¿Cómo le podria hacer?

Víctor Cuervo

Víctor Cuervo

@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.

Víctor Cuervo

ARANA

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

Víctor Cuervo

Kalt

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.

Víctor Cuervo

CAYA

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.

Víctor Cuervo

playdog

Miguel Arcangel,

Eres un agel, Gracias, Muchas garcias por tu codigo…

Víctor Cuervo

Maya

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) {

}
};

Víctor Cuervo

Jrincon

Hola alguien me puede decir como puedo validar una caja de textos que permitan insertar valores float o double

Víctor Cuervo

Marco

Que tal, tengo una duda para convertir un String a Float. Si tengo un JTextField, y el usuario ingresa el dato formato en Fracciones (Ej. 1/2, 2/4, etc..) tengo que guardarlo como un tipo float (Ej si el usuario ingresa 1/2, yo tengo que convertirlo a 0.5), pero el campo no debe de admitir letras o caracteres (solo “/” o “.”), solo numeros o fracciones…. Asi que mi problema es saber como restringir el JTextField para que solo admita flotantes, pero tambien la posibilidad de ingresar Fracciones (1/2, 3/4, etc), y saber que numero es en float…. Ojala me puedan ayudar, Gracias

Víctor Cuervo

lineadecodigo

@stefanny,

Nosotros estamos empezando a hacer un manual en
http://www.manualweb.net/tutorial-java/

Lo iremos completando poco a poco.

Víctor Cuervo

Pintor

Aun no me queda muy claro eso de las validaciones
no se si me puedan poner un ejemplo corto pero
completo de que un jTextField solo acepte datos numericos
de lo contrario que me mande una notificacion!!!

Víctor Cuervo

stefanny

mandenme una explicacion desde el principio de como usar java porfavor

Víctor Cuervo

luis

y que resultado me mostraria si le pongo esto: x*x*x + 2*x*x + 10*x – 20;

Víctor Cuervo

Mario

Hola, me gustaría saber si es posible hacerlo en lenguaje C?

Grácias

Víctor Cuervo

cesar

Soy nuevop en java, necesito saber por donde puedo comensar gracias.

Víctor Cuervo

Liz

hola!!

necesito saber como puedo extraer de una cadena solo caracteres. por ejemplo:

5#$%_.Hola,_, que me regreso solo HOLA
por favor !!!

Víctor Cuervo

gaf

String semana[] = { “lunes”, “martes”, “miercoles”, “jueves”, “viernes”, “sabado”, “domingo” };

——————para el ciclo “for”——————:

for(String dias: semana)
System.out.println(dias);

//otra forma:
//for(int i=0; i<semana.length; i++);
//System.out.println(semana[i]);

—————— para el ciclo "while" ——————
int aux=0;

while (aux<semana.length){
System.out.println(semana[aux]);
aux++;
}

—————— para el ciclo "do while"——————

int aux1=0;
do{
System.out.println(semana[aux1]);
aux1++;
} while (aux1<semana.length);

Víctor Cuervo

Gabriel

Al parecer, no esta mostrando de forma correcta lo publicado asi que lo hare en partes

Víctor Cuervo

Gabriel

Item anterior——————————————-
Hola Beatriz!!! Primero te sugiero que pruebes en consultar en la seccion que habla sobre Array, http://lineadecodigo.com/tag/array/
Segundo, una forma de imprimir por pantalla el contenido del arreglo es:

String semana[] = { “lunes”, “martes”, “miercoles”, “jueves”, “viernes”, “sabado”, “domingo” };

para el ciclo “for”:

for(String dias: semana)
System.out.println(dias+” “);

//otra forma:
//for(int i=0; iaux);

Hola Beatriz!!! Primero te sugiero que pruebes en consultar en la seccion que habla sobre Array, http://lineadecodigo.com/tag/array/
Segundo, una forma de imprimir por pantalla el contenido del arreglo es:

String semana[] = { “lunes”, “martes”, “miercoles”, “jueves”, “viernes”, “sabado”, “domingo” };

para el ciclo “for”:

for(String dias: semana)
System.out.print(dias+” “);

//otra forma:
//for(int i=0; isemana.length)
System.out.println(semana[aux1]);
aux1++;

Víctor Cuervo

Gabriel

Hola Beatriz!!! Primero te sugiero que pruebes en consultar en la seccion que habla sobre Array, http://lineadecodigo.com/tag/array/
Segundo, una forma de imprimir por pantalla el contenido del arreglo es:

String semana[] = { “lunes”, “martes”, “miercoles”, “jueves”, “viernes”, “sabado”, “domingo” };

para el ciclo “for”:

for(String dias: semana)
System.out.println(dias+” “);

//otra forma:
//for(int i=0; iaux);

Hola Beatriz!!! Primero te sugiero que pruebes en consultar en la seccion que habla sobre Array, http://lineadecodigo.com/tag/array/
Segundo, una forma de imprimir por pantalla el contenido del arreglo es:

String semana[] = { “lunes”, “martes”, “miercoles”, “jueves”, “viernes”, “sabado”, “domingo” };

para el ciclo “for”:

for(String dias: semana)
System.out.print(dias+” “);

//otra forma:
//for(int i=0; isemana.length)
System.out.println(semana[aux1]);
aux1++;

Víctor Cuervo

Beatriz :)

hola… necesito con uno trabajo si por ahi alguien me ayuda por q necesito…dice asi …..”crear un array de Strings inicializado con los nombres de los 7 dias de la semana.. ejemplo.. String days[]{“lunes”,”martes”,”miercoles”,”jueves”,viernes,”sabado”,”domingo”}
usando un declaracion while, imprima todo el contenido del array..haga lo mismo para las declaraciones do’while y for…

Víctor Cuervo

lineadecodigo

@Javier,

Eso lo hace el método Integer.parseInt(cadena). En ese caso convierte cadena a enteros.

Eso sí, te tienes que asegurar que la cadena de texto son todo números. Es decir, no vale “Julio 2009″, si no que tiene que ser “2009”.

Espero que te sirva.

Víctor Cuervo

javier

Hola soy nuevo en Java, ¿como puedo extraer un valor numérico de un String? por ejemplo String[] cadena =” Julio 2009″ como se pueden convertir ese 2009 a entero.
Gracias.

Víctor Cuervo

lulu

gracias por estos ejemplos

Víctor Cuervo

Fhernd

Ánimo. Hasta ahora has hecho un buen trabajo! Hasta pronto!

Víctor Cuervo

Minos

EDIT:

private static boolean isNumeric(String cadena)
Integer.parseInt(cadena)

mas concretamente tengo dudas en q poner en los parentesis…

Salu2.

Víctor Cuervo

Minos

Hola soy algo nuevo en java, estoy haciendo un programa, de un plano carteasiano q dandoles los valores X y Y, me dice en q cuadrante se encuentra el punto, pero me pidieron q validar q solo metieran numeros, pero estoy algo perdido en eso de validacion, ya mi programa esta hecho y funciona bien, tengo 2 clases la q me resuelve el problema y la del frame en swing, uso el NetBeans por si ayuda en algo….. y pues queria saver donde poner ese codigo q veo q ponen aya arriba, me imagino q tengo hacer otra clase para el codigo de validacion, pero despues como lo llamo?? y en q clase?? y q pongo en esas lineas q dicen :

private static boolean isNumeric(String cadena)
Integer.parseInt(cadena)

si me pudieran explicar les estaria agradecidisimo, ya q ando MUY perdido en excepciones, ah otra cosa me lo pidieron con boolean algo asi, q no tenga system.out.println, se los digo por si las dudas.

Salu2.

Víctor Cuervo

lineadecodigo

@Amd,

Ya hemos insertado el enlace para la descarga del programa… espero que te sirva.

Víctor Cuervo

lineadecodigo

@Zulay,

¿Qué solo pueda insertar 20 números por pantalla o que el número tenga como máximo 20 posiciones?

Víctor Cuervo

lineadecodigo

@juan,

¿Qué quieres decir con “utilizando componentes”?

Víctor Cuervo

juan

como le puedo hacer para validar en java utilizando componentes

Víctor Cuervo

zulay

como hago para que solo me acepte 20 numeros… no se como hacerlo si me pueden atudar porfi

Víctor Cuervo

tyki

Para emiliano:
cambia la validacion
if (gen==”m” || gen==”a” || gen==”t” || gen==”e”)
this.gen=gen;
else
System.out.println(”error”);

por::

if( gen.equals(“m”) || gen.equals(“a”) || gen.equals(“t”) || gen.equals(“e”) )

Víctor Cuervo

rodrigo

Pues se me ocurre con un StringTokenizer, le pasas el punto y dependiendo si hay más o no, esa es una idea

Víctor Cuervo

solano

Amigos

Como quedaria una validacion mas exacta, si deseo validar
que numero con punto flotante, es decir que sea valido
cuando el usuario ponga 2.1 y invalido cuando sea 2.2.2.2
en otras palabras numero-punto-numero.

Mi codigo es el siguienes:

numeroUno = JOptionPane.showInputDialog(“Introdusca el Primer Numero”);

Pattern p= Pattern.compile(“[^0-9\\.]”);
Matcher m=p.matcher(numeroUno);

Mi problema es que solo me valida el primer punto, pero si
sigo introduciendo mas puntos tambien los acepta

Víctor Cuervo

alvaro

hola necesito saber si un vector contiene en su cadena un dato numerico

Víctor Cuervo

Emiliano

hola a todos la pregunta mia es :yo necesito validar asi
if (gen==”m” || gen==”a” || gen==”t” || gen==”e”)
this.gen=gen;
else
System.out.println(“error”);
y me pasa que cuamdo ingreso los datos no me los toma o sea sale por el else .ahi viene mi pregunta :
COMO SE DEBERIAN VALIDAR SOLO ESTOS DATOS M,A,T,E
desde ya muchas gracias si me pueden responder se los agradecere mucho

Víctor Cuervo

m_25

hola toy aprendiendo java
kiero saber cual es el codigo para el sgte enunciado:
ingresar edad de un alumno en letras por ejemplo quince o no se cualkier otro ok y saber si es mayor o menor de edad. se considera mayor de edad a personas mayores de 18 años.
Lo tengo en algoritmo pero debo hacerlo con as numeric.
si alguien sabe com envienmelo.
grax

Víctor Cuervo

pixel_1001

a mi tambien,, graxx!! xD

Víctor Cuervo

angelfqc

Eres lo maximo me ayudo muucho

Víctor Cuervo

Fher

como lo podria hacer que validara y no permitira numeros negativos, porqu asi si lo permite. Gracias

Víctor Cuervo

Amd

por que no puedo descargar esto?

Víctor Cuervo

lyonn

y qué haz hecho por tú cuenta???? puedes pegar la parte que no te funciona

Víctor Cuervo

xxxxx

oe nada de sus movidas me funciono estoy haciendo un programa sencillo que no me muestre el caracter que ingrese en caso de letras , solo quiero que muestre numeros….. NO LES PIDO NADA MAS!!!!! apoyen al caido

Víctor Cuervo

Teresa

eso se me hace muy interesante no se si me podrian dar asesorias por que se me complica

Víctor Cuervo

lyonn

hola…
pues bien, si lo que quieren es que valide sólo numeros enteros y que además no permita escribir caracteres, con la posibilidad de borrar, hice lo siguiente:


public void isIntNumeric() {
this.addKeyListener(new KeyAdapter() {

@Override
public void keyTyped(KeyEvent e) {
char caracter = e.getKeyChar();
if (((caracter '9')) && (caracter != KeyEvent.VK_BACK_SPACE)) {
e.consume();
}
}
});

}

Víctor Cuervo

v1ctOr6

Lo del match esta muy bueno, puedes validar cadenas muy largas para probar si tienen solo numeros…

Les tengo una pregunta: ¿Cuál es la expresión regular que necesito enviar al metodo match, para que cheque si hay solo letras? Que no acepte caracteres especiales, solo letras acentuadas (ÁÉÍÓÚáéíóú) o ( ü ).
Gracia5

Víctor Cuervo

GAF

hola gente!!! Estan re buenos sus aportes pero quisiera saber como validar un String, osea que el dato que se ingresa sea una cadena de caracteres y no otra cosa. Teniendo en cuenta que la variable en la que se guarda el dato es de tipo String.
Por ejemplo, que cuando se pida el nombre se valide que sea una cadena de letras y no otra cosa :
import element.*;
ConsoleWindow c=new ConsoleWindow();
String nombre;
c.out.println(“Ingrese su nombre”);
nombre=c.input.readString();
c.out.print(“Su nombre es”+nombre)

Víctor Cuervo

Wendy Valle

Gracias Jumi… La expresion tambien se puede utilizar con letras… Excelente codigo…

Víctor Cuervo

Johanitta

Gracias…

Víctor Cuervo

juan carlos

nesito validar los datos de un archivo de texto .txt que tengan este formato dd/mm/aa,hh:mm:ss,########,########,hh,mm,ss
lo que nesito es codigo que pueda validar y guardarlo en una clase serializable

Víctor Cuervo

lorsy

oye como capturo el valor que me inseratn en un textfield?

Víctor Cuervo

Hans - de Bolivia

Gracias broder, es que recien empiezo la carrera,
y sigan ayudando, Gracias.
nos vemos en la siguiente—->

Víctor Cuervo

Jumi

Hombre, para expresiones regulares sencillas, lo hacemos así:

if (“12345″.matches(“[0-9]*”))
System.out.println(“Es un número”);
else
System.out.println(“No es un número”);

Y asunto arreglado!!
Fácil, eh?

Víctor Cuervo

Hans - de Bolivia

!disculpen hermanos;
saben soy muy nuevo en esto, no se si me explicarian.
porque he copiado los ejemplos que hay, dentero del main
y no me corre, estoy haciendo algo mal!!!!!!!

Víctor Cuervo

Juan Ignacio

Yo lo implemente asi la validacion que un string tenga solo numeros

private boolean isNumber(String campo){
try{
int a = Integer.parseInt(campo.trim());
return true;
}catch(NumberFormatException e){
return false;
}
}

Ojala les sirva =)

Víctor Cuervo

departederaafat

soy cojo buen aporte C>brazos

Víctor Cuervo

Elamo!

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

Víctor Cuervo

Asclepios from Egipt

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 😉

Víctor Cuervo

paul

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 )

Víctor Cuervo

Miguel Arcangel

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

Víctor Cuervo

Miguel Arcangel

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”);

Víctor Cuervo

xavier

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

Víctor Cuervo

la desesperada

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!!!

Víctor Cuervo

Denis González

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

Víctor Cuervo

cllach

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 …. ?

Víctor Cuervo

margie

Es tan sencillo pero eficiente gracias

¿Algo que nos quieras comentar?

Déjanos tu comentario, no te preocupes que tu email no será publicado

*


*