Validar si un dato es numérico con Patrones en Java

31/mar/2009 Java , , , , 13 Comentarios
java

En el artículo Validar si un dato es numérico en Java veíamos como de una forma muy sencilla y mediante la transformación de cadenas en enteros podíamos validar si un dato es numérico en Java.

Si bien, ese ejemplo, válido para aprender a programar con Java, se nos quedaría corto para ejemplos reales.

Una buena forma, como han apuntado algunos de nuestros visitantes, es utilizar patrones sobre las cadenas de texto.

Lo primero que vamos a definir es el patrón que detecte que una cadena sea un número. Para ello indicaremos que la cadena tenga dígitos y que estos puedan aparecer N veces.

De esta manera nuestro patrón sería el siguiente:

[0-9]*

Otra forma de representar un dígito es \d. Por lo tanto nuestro patrón sería

\\d*

Hay que tener cuidado y escapar la barra invertida. Para ello la duplicamos la barra invertida.

Ahora deberemos ejecutar el patrón sobre la cadena. La gestión de patrones y expresiones regulares en Java se realiza mediante la librería java.util.regex y sus clases Matcher y Pattern. Aunque también tenemos el método .matches(), el cual se puede ejecutar sobre una String.

Esto último será lo que hagamos para ejecutar el patrón:

  1. String cadenaUno = "1234";
  2.  
  3. if (cadenaUno.matches("[0-9]*"))
  4. System.out.println("Es un número");
  5. else
  6. System.out.println("No es un número");

O con el otro patrón:

  1. String cadenaUno = "1234";
  2.  
  3. if (cadenaUno.matches("\\d*"))
  4. System.out.println("Es un número");
  5. else
  6. System.out.println("No es un número");

Podéis probar a cambiar el contenido del String para probar los diferentes comportamientos.

Vídeos sobre Java Util

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

13 comentarios en “Validar si un dato es numérico con Patrones en Java”

Víctor Cuervo

Pedro Redondo

\\d+ no es suficiente ya que fgf152 daría verdadero, tienen que hacerlo de la siguiente manera:

Pattern p = Pattern.compile(“^(?:\\+|-)?\\d+$”);
Matcher m = p.matcher(cadena);

if (m.find())
System.out.println(“Es un número”);
else
System.out.println(“No es un número”);

Víctor Cuervo

Víctor Cuervo

@RC XT,

Me alegro que te sirviese. :-D

Saludos.

Víctor Cuervo

Víctor Cuervo

@diego,

Tienes que montar una expresión regular con los símbolos a chequear

\d para los dígitos
– para los guiones
\s para los espacios en blanco

y ahora ponerlo todo junto… para ello utilizamos el separador OR que es la barra |

“\d|\s|-”

Espero que te sirva. Saludos.

Víctor Cuervo

RC XT

Me sirvio el post y es cierto de chuidiang de poner +

Víctor Cuervo

diego

buen tutorial,
como haría si necesito solo números y dashes ( – ), guiones y tambien caracteres en blanco pero no letras? gracias! no importa la longitud

Víctor Cuervo

jesus

Gracias me sirvio ……

Víctor Cuervo

Movill

Buenas gente soy un novato en programacion en java pero de verdad le estoy poniendo empeño para aprender.. y esta web me ha ayudado mucho! Pero lo que no he logrado hasta ahora es que mi programa no explote por asi decirlo cuando no me introducen nada.. aqui les dejo el programa que hice que tiene una especie de validacion q si no es un numero primo se repite.. pero si me introducen letra o no me introducen nada explota! PUMP! jajaj aqui esta el codigo.. espero puedan ayudarme.. Gracias por todo les dejo mi email..

henryandres.mp@gmail.com
—————————————————————————————————-
import javax.swing.*;

public class numerosprimos {

public static void main(String[] args) {
// TODO code application logic here
int suma, contador = 2, numero1, numero2;
boolean primo=true;
String vaci, recibir, recibirr2, recibirr3=”1234″;

JOptionPane.showMessageDialog(null, “Este programa realiza una suma de 2 numeros primos que usted introduzca”);

do{
recibir=JOptionPane.showInputDialog(“Introduzca su primer numero”);
numero1=Integer.parseInt(recibir);

if(recibir.matches(“\\d+”)){
JOptionPane.showMessageDialog(null, “No introdujo nada..”);
}

if(numero1 % contador ==0){
JOptionPane.showMessageDialog(null, “Su primer numero es incorrecto.. Intente de nuevo pero con un numero primo”);

}
else{
JOptionPane.showMessageDialog(null, “Numero correcto”);
}

}while(numero1 % contador==0 ) ;

do{
recibirr2=JOptionPane.showInputDialog(“Introduzca su segundo numero”);
numero2=Integer.parseInt(recibirr2);
if(numero2 % contador ==0){
JOptionPane.showMessageDialog(null, “Su segundo numero es incorrecto.. Intente de nuevo pero con un numero primo”);
}
else{
JOptionPane.showMessageDialog(null, “Numero correcto”);
}

}while(numero2 % contador==0 );

suma=numero1 + numero2;

System.out.print(suma);

JOptionPane.showMessageDialog(null, “La suma de sus dos numeros primos es \n ” + suma);

}

}

Víctor Cuervo

kaedu

^^ muchas gracias… muy buena la web ^^

Víctor Cuervo

ChXt0

Órale que interesante, no sabía que se podían utilizar las expresiones regulares en Java para esto.

Todos los días se aprende algo nuevo, gracias a los dos.

Saludos.

Víctor Cuervo

chuidiang

Hola:

Si quires garantizar que al menos hay una cifra, en vez de asterisco, usa un +

\\d+

o bien

[0-9]+

El asterisco es 0 o más veces. El + es 1 o más veces.

Se bueno.

Víctor Cuervo

marcos jvc

mmm segun leo (segun dado que no he probado el codigo) una cadena vacia es tomada como un numero cosa que es incorrecta.

Saludos

Víctor Cuervo

lineadecodigo

@chuidiang,

Muy buena contribución… La he incluido en el artículo.

Víctor Cuervo

chuidiang

Hola:

En las expresiones regulares de java el \d es equivalente a [0-9], por lo que en el ejemplo también podría ponerse

cadenaUno.matches(“\\d*”)

La \ hay que “escaparla” poniéndola dos veces.

Se bueno.

¿Algo que nos quieras comentar?

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

*


*