Método String matches de Java

java_base_web

Hola a todos, hoy os explicare como usar el método matches de String.

El método matches de String nos permite comprobar si un String cumple una expresión regular pasado como parámetro. Si es cierta devuelve true, sino false.

Una expresión regular es una expresión textual que utiliza símbolos especiales para hacer búsquedas avanzadas.

Las expresiones pueden contener:

  • Caracteres.
  • Caracteres de control, por ejemplo, \s, \d, etc. Recuerda que añadir un \ mas al introducirlo en una cadena. Los mas usados son:
    • \d , dígito, es igual que [0-9]
    • \D , no dígito, es igual que [^0-9]
    • \s , carácter en blanco, es igual que [\t\n\x0B\f\r]
    • \S , no carácter en blanco, es igual que [^\s]
    • \w , carácter alfanumérico, es igual que [a-zA-Z_0-9]
    • \W , no carácter alfanumérico, es igual que [^\w]
  • Opciones de caracteres, se usa el corchete. Por ejemplo, [afgd] significa que puede contener a, f, g o d.
  • Negación de caracteres, funciona al revés que el anterior, se usa ^. Por ejemplo, [^afgd]
  • Rangos, se usa para que incluya un rango de caracteres. Por ejemplo, para que incluya los caracteres entre a y z [a-z]
  • Intersección: permite unir dos condiciones, es como el operador &&.
  • Cualquier carácter: se usa un punto.
  • Opcional: se usa el símbolo ?, indica que un carácter puede o no aparecer.
  • Repetición: se usa el símbolo *, indica que un conjunto de caracteres se pueden repetir o no.
  • Repetición obligada: se usa el símbolo +, es como el anterior pero debe aparecer mínimo una vez.
  • Repetición un número exacto de veces: después de una expresión abrimos llaves {} con un número dentro, indica el numero de veces que debe repetirse un carácter o expresión. Si después del numero escribimos una coma, indica que debe repetirse como mínimo el número que indiquemos y como máximo los que queramos. Si después de la coma escribimos un número, indica que debe repetirse entre los números que le indiquemos como si fuera un rango.

Veamos una serie de ejemplos:

public class PruebaApp {

	public static void main(String[] args) {

		String cadena="Solo se que no se nada";

		// ejemplo1: devolvera false, ya que la cadena tiene mas caracteres
		System.out.println("ejemplo1: "+cadena.matches("Solo"));

		// ejemplo2: devolvera true, siempre y cuando no cambiemos la cadena Solo
		System.out.println("ejemplo2: "+cadena.matches("Solo.*"));

		// ejemplo3: devolvera true, siempre que uno de los caracteres se cumpla
		System.out.println("ejemplo3: "+cadena.matches(".*[qnd].*"));

		// ejemplo3: devolvera false, ya que ninguno de esos caracteres estan
		System.out.println("ejemplo4: "+cadena.matches(".*[xyz].*"));

		// ejemplo4: devolvera true, ya que le indicamos que no incluya esos caracteres
		System.out.println("ejemplo4: "+cadena.matches(".*[^xyz].*"));

		// ejemplo5: devolvera true, si quitamos los caracteres delante de ? del STring original seguira devolviendo true
		System.out.println("ejemplo5: "+cadena.matches("So?lo se qu?e no se na?da"));

		// ejemplo6: devolvera false, ya que tenemos una S mayuscula empieza en el String
		System.out.println("ejemplo6: "+cadena.matches("[a-z].*"));

		// ejemplo7: devolvera true, ya que tenemos una S mayuscula empieza en el String
		System.out.println("ejemplo7: "+cadena.matches("[A-Z].*"));

		String cadena2="abc1234";

		// ejemplo8: devolvera true, ya que minimo debe repetirse alguno de los caracteres al menos una vez
		System.out.println("ejemplo8: "+cadena2.matches("[abc]+.*"));

		// ejemplo9: devolvera true, ya que, ademas del ejemplo anterior, indicamos que debe repetirse un valor numerico 4 veces
		System.out.println("ejemplo9: "+cadena2.matches("[abc]+\\d{4}"));

		// ejemplo10: devolvera true, ya que, ademas del ejemplo anterior, indicamos que debe repetirse un valor numerico entre 1 y 10 veces
		System.out.println("ejemplo10: "+cadena2.matches("[abc]+\\d{1,10}"));

	}
}

El mejor ejemplo para este método es la evaluación de un e-mail, veamos como seria:

import javax.swing.JOptionPane;
public class PruebaApp {

	public static void main(String[] args) {

		String email;
		boolean emailCorrecto;
		do{
			email=JOptionPane.showInputDialog("Introduce un email");
			emailCorrecto=email.matches("[-\\w\\.]+@\\w+\\.\\w+");
		}while(!emailCorrecto);

		System.out.println("El email "+email+" es correcto");
	}
}

Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.

Etiquetas

5 comments

  1. necesito hacer un programa que ingresando un nombre completo pero si ingresas un numero en el nombre por ejemplo “carlos 8a” te marque q ingrese datos invalidos y tambien para caracteres especiales
    que en el nombre, apellido paterno , apellido materno solo sean letras mayuzculas minusculas y nada de caracteres especiales ni numeros,
    porfa ayuda

  2. Lo que pides es validar dato (supongo que de un formulario), puedes usar expresiones regulares (metodo matches de String) o recorrer la cadena con un bucle y que cuando haya un caracter que no quieras que este, pues darlo como invalido.

    Puedes mandarme un correo, en contactanos, si necesitas algo

    Un saludo.

  3. ¿que indicas con esto (“[-\\w\\.]+@\\w+\\.\\w+”) ?

  4. como hago para validar un cadena?

  5. Depende de que consideres una cadena, si solo caracteres o con algunos signos de puntuacion, etc.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *