Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: Dimitar Stefanov en 02 de Marzo 2016, 18:53

Título: Java comprobar si cadena cumple patrón expresión regular String matches CU00657B
Publicado por: Dimitar Stefanov en 02 de Marzo 2016, 18:53
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
Título: Re:CU00657B Pedir datos en Java por consola
Publicado por: pedro,, 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.
Título: Re:CU00657B Pedir datos en Java por consola
Publicado por: Dimitar Stefanov 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()"
Título: Re:CU00657B Pedir datos en Java por consola
Publicado por: Dimitar Stefanov 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 (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) ); }*/