Buenas, entrego dos soluciones de este ejercicio.
La razón es porque en la primera queria comparar un substring con null o "vacio" y buscando no existe forma, lanza excepción cuando los parametros no están entre el tamaño del substring. Y planteé otra solución a esa.
Primera Solucion con Excepcion.
import java.util.Scanner;
public class Comparador{
public static void main (String[] args){
String palabra1; String palabra2; String comprobar;
int menorPalabra = 1; //por defecto la palabra menor es la 1era si el if no lo cambia se quedará así
int longitud = 0;
System.out.println("Introduce la primera palabra");
Scanner entrada1 = new Scanner(System.in);
palabra1 = entrada1.next(); //utilizo el next() para descartar los espacios solo coje primera palabra
System.out.println("Introduce la segunda palabra");
Scanner entrada2 = new Scanner(System.in);
palabra2 = entrada2.next();
// Compruebo si la palabra 2 es mas larga que la primera o no, para ponerlo en el bucle for como limite.
if(palabra2.length()> palabra1.length() ){
longitud = palabra2.length();
}else { longitud = palabra1.length();
menorPalabra = 2;}
//inicializa a 0 y recorre todos los valores hasta llegar a la longitud menos uno
for (int x = 0; x < longitud; x++){
try{
//if( palabra1.substring(x,x+1)!= null && palabra2.substring(x,x+1) != null ){
if(palabra1.substring(x,x+1).equals(palabra2.substring(x,x+1) ) ){
System.out.println("¿Letra " + (x+1) + " igual en las dos palabras? True");
}else{ System.out.println("¿Letra " + (x+1) + " igual en las dos palabras? False");}
// }
} catch (IndexOutOfBoundsException e) {
System.out.println("¿Letra " + (x+1) + " igual en las dos palabras? La palabra " +
menorPalabra + " no tiene letra " + (x+1));}
}
}
}
Segunda solución con dos Clases, main y una que analiza (para practicar llamar metodos de otra clase)
Clase main
import java.util.Scanner;
public class Comparador1{
public static void main (String[] args){
String palabra1; String palabra2;
System.out.println("Introduce la primera palabra");
Scanner entrada1 = new Scanner(System.in);
palabra1 = entrada1.next(); //con esta opcion me aseguro que solo recojo una palabra hasta un espacio
System.out.println("Introduce la segunda palabra");
Scanner entrada2 = new Scanner(System.in);
palabra2 = entrada2.next();
Analiza compara = new Analiza();
compara.checkPalabra(palabra1,palabra2);
}
}
Clase Analiza
public class Analiza{
public Analiza(){ //vacio
}
public void checkPalabra(String palabra1, String palabra2){
// cualMenor es un semáforo que es o 1 o 2 depende cual palabra sea la menor, por defecto se inicializa con 1.
int cualMenor = 1; int mayor; int menor;
if(palabra1.length() > palabra2.length() ){
cualMenor = 2;
mayor = palabra1.length();
menor = palabra2.length();
}else {
mayor = palabra2.length();
menor = palabra1.length();
}
for(int x = 0; x < mayor;){
while(x < menor){
if(palabra1.substring(x,x+1).equals(palabra2.substring(x,x+1)) ){
System.out.println("Letra " + (x+1) + " igual en las dos palabras: True");
}else{
System.out.println("Letra " + (x+1) + " igual en las dos palabras: False");
}
x++;
}
System.out.println("La palabra " + cualMenor + " no tiene letra " + (x+1));
x++;
}
}
}