Autor Tema: Java comprobar si cadena cumple patrón expresión regular String matches CU00657B  (Leído 3998 veces)

Dimitar Stefanov

  • Experto
  • *****
  • Mensajes: 598
    • Ver Perfil
Buenas tardes.

Aquí dejo mi solución del ejercicio CU00657B del curso Java desde cero.

Citar
EJERCICIO

Crea una clase con un método main que pida una entrada de teclado y usando condicionales, el método length de la clase String y el método substring de la clase String, muestre un mensaje indicando:

a) Si la cadena introducida tiene menos de 5 caracteres, entre 5 y 15 caracteres o más de 15 caracteres.

b) Si la cadena introducida comienza por la letra a.

Ejemplo: se pide la entrada y el usuario introduce “vereda”. Por pantalla se debe mostrar: “La cadena introducida tiene entre 5 y 15 caracteres y no comienza por a”.

Código: [Seleccionar]
import java.util.Scanner; //Importación del código de la clase Scanner desde la biblioteca Java

public class EjercicioCU00657B{

    public static void main(String []args){
        System.out.println("Introduzca una cadena por teclado:");
        String entradaPorTeclado = "";
        String msg = "La cadena tiene menos de 5 carácteres y empieza por la letra \"a\"";
        Scanner entradaMetodoScanner = new Scanner(System.in); //Creación de un objeto Scanner
        entradaPorTeclado = entradaMetodoScanner.nextLine();
        if(entradaPorTeclado.length() < 5 && entradaPorTeclado.matches("a.*") != true ){
            msg = "La cadena tiene menos de 5 carácteres y NO empieza por la letra \"a\"";
        }else if(5 <= entradaPorTeclado.length() && entradaPorTeclado.length()<= 15 && entradaPorTeclado.matches("a.*") == true){
            msg = "La cadena tiene más de 5 y menos de 15 carácteres y empieza por la letra \"a\"";
        }else if(5 <= entradaPorTeclado.length() && entradaPorTeclado.length()<= 15 && entradaPorTeclado.matches("a.*") != true){
            msg = "La cadena tiene más de 5 y menos de 15 carácteres y NO empieza por la letra \"a\"";
        }else if(entradaPorTeclado.length()> 15 && entradaPorTeclado.matches("a.*") == true){
            msg = "La cadena tiene más de 15 carácteres y empieza por la letra \"a\"";
        }else if(entradaPorTeclado.length()>15 && entradaPorTeclado.matches("a.*") != true){
            msg = "La cadena tiene más de 25 carácteres y NO empieza por la letra \"a\"";
        }
            System.out.println(msg);
       
    } //Cierre del método "main"
} //Cierre de la clase

Quería aclarar varios asuntos.

Primero: como podéis ver he utilizado "!= true" en vez de "== false". No sé si su utilización es muy correcta.

Segundo: con el método "matches(expresionRegularParaCoincidencias)" y de la manera que lo he utilizado yo si se puede verificar si empieza o no la cadena por "a", pero como podría comprobar si contiene la "a". He probado con "nombreDeLaVariable.matches("*.a.*")", pero me salió un error.

Tercero: aquí os dejo el enlace para los que queráis ver la información del método ".matches()".

Gracias
« Última modificación: 05 de Marzo 2016, 17:52 por César Krall »

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Re:CU00657B Pedir datos en Java por consola
« Respuesta #1 en: 02 de Marzo 2016, 22:58 »
Hola dimiste, el ejercicio pedía:
Citar
y usando condicionales, el método length de la clase String y el método substring de la clase String,

y has usado matches().

Saludos.

Dimitar Stefanov

  • Experto
  • *****
  • Mensajes: 598
    • Ver Perfil
Re:CU00657B Pedir datos en Java por consola
« Respuesta #2 en: 03 de Marzo 2016, 11:55 »
Hola, Pedro.

He corregido el código y me ha quedado de la siguiente manera:

Código: [Seleccionar]
import java.util.Scanner; //Importación del código de la clase Scanner desde la biblioteca Java

public class CU00657B{

    public static void main(String []args){
        System.out.println("Introduzca una cadena por teclado:");
        String entradaPorTeclado = "";
        String msg = "La cadena tiene menos de 5 carácteres y empieza por la letra \"a\"";
        Scanner entradaMetodoScanner = new Scanner(System.in); //Creación de un objeto Scanner
        entradaPorTeclado = entradaMetodoScanner.nextLine();
        if(entradaPorTeclado.length() < 5 && (entradaPorTeclado.substring(0,1)!= "a" || entradaPorTeclado.substring(0,1)!= "A") ){
            msg = "La cadena tiene menos de 5 carácteres y NO empieza por la letra \"a\"";
        }else if(5 <= entradaPorTeclado.length() && entradaPorTeclado.length()<= 15 && (entradaPorTeclado.substring(0,1)== "a" || entradaPorTeclado.substring(0,1)== "A")){
            msg = "La cadena tiene más de 5 y menos de 15 carácteres y empieza por la letra \"a\"";
        }else if(5 <= entradaPorTeclado.length() && entradaPorTeclado.length()<= 15 && (entradaPorTeclado.substring(0,1)!= "a" || entradaPorTeclado.substring(0,1)!= "A")){
            msg = "La cadena tiene más de 5 y menos de 15 carácteres y NO empieza por la letra \"a\"";
        }else if(entradaPorTeclado.length()> 15 && (entradaPorTeclado.substring(0,1)== "a" || entradaPorTeclado.substring(0,1)== "A")){
            msg = "La cadena tiene más de 15 carácteres y empieza por la letra \"a\"";
        }else if(entradaPorTeclado.length()>15 && (entradaPorTeclado.substring(0,1)!= "a" || entradaPorTeclado.substring(0,1)!= "A")){
            msg = "La cadena tiene más de 25 carácteres y NO empieza por la letra \"a\"";
        }
            System.out.println(msg);
       
    } //Cierre del método "main"
} //Cierre de la clase

Pero no sé por qué, no hace bien las comparaciones de los substring. Sólo comprueba la longitud y a base a ello me ejecuta las condicionales. Por qué?

Gracias.

PD. También he hecho esto:

Código: [Seleccionar]
import java.util.Scanner; //Importación del código de la clase Scanner desde la biblioteca Java

public class EjercicioCU00657B{

    public static void main(String []args){
        System.out.println("Introduzca una cadena por teclado:");
        String entradaPorTeclado = "";
        String msg = "La cadena tiene menos de 5 carácteres y empieza por la letra \"a\"";
        Scanner entradaMetodoScanner = new Scanner(System.in); //Creación de un objeto Scanner
        entradaPorTeclado = entradaMetodoScanner.nextLine();
        if(entradaPorTeclado.length() < 5 && entradaPorTeclado.substring(0,1).matches("a") != true ){
            msg = "La cadena tiene menos de 5 carácteres y NO empieza por la letra \"a\"";
        }else if(5 <= entradaPorTeclado.length() && entradaPorTeclado.length()<= 15 && entradaPorTeclado.substring(0,1).matches("a") == true){
            msg = "La cadena tiene más de 5 y menos de 15 carácteres y empieza por la letra \"a\"";
        }else if(5 <= entradaPorTeclado.length() && entradaPorTeclado.length()<= 15 && entradaPorTeclado.substring(0,1).matches("a") != true){
            msg = "La cadena tiene más de 5 y menos de 15 carácteres y NO empieza por la letra \"a\"";
        }else if(entradaPorTeclado.length()> 15 && entradaPorTeclado.substring(0,1).matches("a") == true){
            msg = "La cadena tiene más de 15 carácteres y empieza por la letra \"a\"";
        }else if(entradaPorTeclado.length()>15 && entradaPorTeclado.substring(0,1).matches("a") != true){
            msg = "La cadena tiene más de 25 carácteres y NO empieza por la letra \"a\"";
        }
            System.out.println(msg);
       
    } //Cierre del método "main"
} //Cierre de la clase

pero en este código, como comprobarás, sigo usando "matches()" aunque precedentemente le he puesto "substring()"

Dimitar Stefanov

  • Experto
  • *****
  • Mensajes: 598
    • Ver Perfil
Re:CU00657B Pedir datos en Java por consola
« Respuesta #3 en: 03 de Marzo 2016, 12:11 »
Pedro, ya se porque no funciona. La respuesta la encontré en la siguiente entrega, jeje:

https://www.aprenderaprogramar.com/index.php?option=com_content&view=article&id=627:pensar-en-objetos-una-entrada-de-teclado-o-consola-en-java-como-objeto-con-campos-y-metodos-cu00661b&catid=68:curso-aprender-programacion-java-desde-cero&Itemid=188

precisamente aquí:

Citar
/*IMPORTANTE: EN JAVA LOS OBJETOS NO SE PUEDEN COMPARAR USANDO == POR ESO ESTO NO FUNCIONARÁ       

          if (entradaTeclado.substring(0,1)=="j") {

          System.out.println ("Hemos detectado una j");

          } else { System.out.println ("Mira esto:" + entradaTeclado.substring(0,1) ); }*/ 

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".