
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:
String cadenaUno = "1234";
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:
if (Comunes.isNumeric(cadenaUno))
System.out.println(cadenaUno + " es un numero");
else
System.out.println(cadenaUno + " NO es un numero");
if (Comunes.isNumeric(cadenaDos))
System.out.println(cadenaDos + " es un numero");
else
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:
private static boolean isNumeric(String cadena){
try {
Integer.parseInt(cadena);
return true;
} catch (NumberFormatException nfe){
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.
gabriel
me podrian ayudar con este ejercicio porfavor
1) En una institución se desea implementar una aplicación para almacenar las calificaciones de los alumnos
y mostrar el nombre del alumno con la calificación correspondiente. El usuario debe especificar cuantas
calificaciones (alumnos) desea ingresar.
Mirko
10/6/2020 aun sigo buscando donde sale el «Comunes» :s
Víctor Cuervo
Buenas Mirko,
El código de Comunes está en https://github.com/victorcuervo/lineadecodigo_java/blob/master/src/com/lineadecodigo/java/basico/Comunes.java
Y el de este ejemplo concreto en
https://github.com/victorcuervo/lineadecodigo_java/blob/master/src/com/lineadecodigo/java/basico/IsNumeric.java
Espero que te sirva.
Saludos.
Maryuri Benavidez Tafur
hola por fa me podrían ayudar a la validación de datos numéricos y que no me permita ingresar letras se les agradecen….
unicornio
while (!numero1.matches(«[+-]?[\\d]*[.]?[\\d]+»));
Victor
Hola nesesito validar q mi string sea xx-ABC
Donde. X sea numeros y abc sea letras con el guion.
Acke
Hola, me sirvio mucho esta info (: !
gabo
Muchas gracias, tenia tiempo buscando como hacer esto ^-^
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
@ARANA,
Defines un array:
Y lo recorrer mientras llamas a la función isNumeric:
Espero que te sirva de ayuda.
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
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.
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.
Gerardo
hola, lo que tienes que realizar para esto es validar cada ver que preciones una tecla en la caja de texto de esa forma como validas dato se puede mandar una error cuando se precione un numero , otra forma es dividir el String en un vector y despues validar uno a uno.
Saludos.
playdog
Miguel Arcangel,
Eres un agel, Gracias, Muchas garcias por tu codigo…
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) {
}
};
Jrincon
Hola alguien me puede decir como puedo validar una caja de textos que permitan insertar valores float o double
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
lineadecodigo
@stefanny,
Nosotros estamos empezando a hacer un manual en
http://www.manualweb.net/tutorial-java/
Lo iremos completando poco a poco.
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!!!
stefanny
mandenme una explicacion desde el principio de como usar java porfavor
luis
y que resultado me mostraria si le pongo esto: x*x*x + 2*x*x + 10*x – 20;
Mario
Hola, me gustaría saber si es posible hacerlo en lenguaje C?
Grácias
cesar
Soy nuevop en java, necesito saber por donde puedo comensar gracias.
Liz
hola!!
necesito saber como puedo extraer de una cadena solo caracteres. por ejemplo:
5#$%_.Hola,_, que me regreso solo HOLA
por favor !!!
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);
Gabriel
Al parecer, no esta mostrando de forma correcta lo publicado asi que lo hare en partes
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++;
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++;
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…
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.
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.
lulu
gracias por estos ejemplos
Fhernd
Ánimo. Hasta ahora has hecho un buen trabajo! Hasta pronto!
Minos
EDIT:
private static boolean isNumeric(String cadena)
Integer.parseInt(cadena)
mas concretamente tengo dudas en q poner en los parentesis…
Salu2.
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.
lineadecodigo
@Amd,
Ya hemos insertado el enlace para la descarga del programa… espero que te sirva.
lineadecodigo
@Zulay,
¿Qué solo pueda insertar 20 números por pantalla o que el número tenga como máximo 20 posiciones?
lineadecodigo
@juan,
¿Qué quieres decir con «utilizando componentes»?
juan
como le puedo hacer para validar en java utilizando componentes
zulay
como hago para que solo me acepte 20 numeros… no se como hacerlo si me pueden atudar porfi
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”) )
rodrigo
Pues se me ocurre con un StringTokenizer, le pasas el punto y dependiendo si hay más o no, esa es una idea
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
alvaro
hola necesito saber si un vector contiene en su cadena un dato numerico
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
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
pixel_1001
a mi tambien,, graxx!! xD
angelfqc
Eres lo maximo me ayudo muucho
Fher
como lo podria hacer que validara y no permitira numeros negativos, porqu asi si lo permite. Gracias
Amd
por que no puedo descargar esto?
lyonn
y qué haz hecho por tú cuenta???? puedes pegar la parte que no te funciona
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
Teresa
eso se me hace muy interesante no se si me podrian dar asesorias por que se me complica
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();
}
}
});
}
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
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)
Wendy Valle
Gracias Jumi… La expresion tambien se puede utilizar con letras… Excelente codigo…
Johanitta
Gracias…
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
lorsy
oye como capturo el valor que me inseratn en un textfield?
Hans – de Bolivia
Gracias broder, es que recien empiezo la carrera,
y sigan ayudando, Gracias.
nos vemos en la siguiente—->
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?
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!!!!!!!
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 =)
departederaafat
soy cojo buen aporte C>brazos
Elamo!
Muy buen aporte, me costo hcerlo, pero es que soy muy noob (thnx) ^^
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 ;)
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 )
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
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»);
xavier
puede ser que el numero 12345678901 , me diga que no es numerico? un saludo
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!!!
Denis González
Excelente …!!!
Para doubles: quizás isNAN() o Double.parseDouble() aunque en realidad no los he probado.
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 …. ?
margie
Es tan sencillo pero eficiente gracias