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
-
Buenas tardes.
Aquí dejo mi solución del ejercicio CU00657B del curso Java desde cero.
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”.
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
-
Hola dimiste, el ejercicio pedía:
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.
-
Hola, Pedro.
He corregido el código y me ha quedado de la siguiente manera:
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:
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()"
-
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í:
/*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) ); }*/