Hola, bueno, creo que te puedo aportar alguna cosilla mas:
A ver lo de concatenar unos métodos con otros, es muy común, claro esta que siempre se puede hacer lo que tu dices:
porque se supone que al usar el metodo
substring no deberias de declarar una Variable que contuviera "entradaTeclado.substring(0,1)" y ya despues si hacer el "equals".
Pero ten en cuenta que al hacer eso estas creando una variable nueva, lo que conlleva a la necesidad de asignar una nueva posición de memoria, lo que hace que el programa deba ejecutar mas instrucciones y lo que lleva a un mayor tiempo de ejecución.
Mientras que si lo haces con métodos encadenados el programa ganará en eficiencia además de que te ahorrarás bastante código.
Cuando encadenar y cuando crear variables intermedias.
Bueno, imagínate que la cadena que nos devuelve "entradaTeclado.substring(0,1)" vamos a necesitarla 1000 veces, entonces si te convendría crear una variable intermedia, pero si te fijas en este programita solo hacemos uso de ella 2 veces con lo cual es mas ligero los métodos concatenados asi: "entradaTeclado.substring(0,1).equals("a");"
Poco a poco te iras acostumbrando a esto de concatenar métodos, te darás cuenta que si tienes un método A que devuelve una cadena y un método B que se invoca con un objeto de tipo cadena, podrás concatenarlos de esta forma A().B()
Veamos con un ejemplo simple:
public class Prueba {
public static void main (String[ ] Args) {
String s1="pepe";
String s2="PePe";
System.out.println(s1.substring(0, 2).toLowerCase().equals(s2.substring(0, 2).toLowerCase()));
}
}
Simplemente tenemos dos cadenas y se imprime por pantalla el resultado de esta instrucción: " s1.substring(0, 2).toLowerCase().equals(s2.substring(0, 2).toLowerCase()) "
donde s1 es "pepe" y s2 es "PePe"
Esa instrucción se ejecuta de izquierda a derecha y es el punto el que delimita cada instrucción, veamoslo paso a paso:
Instrucción 1: s1 --> Simplemente es el valor de la cadena s1 es decir "pepe"
Instrucción 2: substring(0,2) --> Pues nos devolverá la cadena "pe"
Instrucción 3: toLowerCase() --> Este método nos convierte a minúsculas lo que tenga a su izquierda, que en este caso es "pe"
Instrucción 4: equals(s2.substring(0, 2).toLowerCase()) --> En este caso compararía el "pe" que teníamos a la izquierda con lo que está entre paréntesis.
En este punto, java mantendría la cadena "pe" almacenada y empezaría a evaluar lo que esta dentro del paréntesis: " s2.substring(0, 2).toLowerCase() " que si empezamos a leer de izquierda:
s2 --> tiene la cadena "PePe"
substring(0, 2) --> sería "Pe"
toLowerCase() --> seria "pe"
Por tanto se mostraría en pantalla el valor: true
Ahora veamos como sería si lo hiciéramos almacenando en variables intermedias los valores de cada instrucción:
public class Prueba {
public static void main (String[ ] Args) {
String s1="pepe";
String s2="PePe";
String subS1=s1.substring(0, 2);
String lowerSubS1=subS1.toLowerCase();
String subS2=s2.substring(0,2);
String lowerSubS2=subS2.toLowerCase();
System.out.println(lowerSubS1.equals(lowerSubS2));
}
}
Si te fijas hemos tenido que crear 4 variables auxiliares lo que podíamos realizar en una sola linea. Y esta es de las simples, jeje hay veces que hay que concatenar 6 o 7 métodos en cadena. Que claro esta que siempre podemos hacerlo por pasos pero como ves es mas rápido y eficiente de esta manera.
La clave esta en que lo que devuelve el método de la izquierda, debe ser lo que invoca al método de la derecha.
Bueno espero al menos haberte podido aclarar alguna cosilla, aunque es lo de siempre con la practica y el tiempo te irás a costumbrando a realizar este tipo de sentencias.
Un saludo!