Estudando Java Não Entendi essa linha

Olá! estou estudando Java, mais precisamente esse código abaixo:

public class TestIsSubString {
    private static boolean isSubString(String item, String line) {
        int i, j;
        boolean encontrado = false;
        
        for ( i = 0; (i < line.length()) && !encontrado; i++) {
            j = 0;
            encontrado  = false;
            while (!encontrado ) {
                if (j >= item.length()) {
                    break;
                } else if ((i+j) >= line.length()) {
                    break;
                } else if (item.charAt(j) != line.charAt(i+j)) {
                    break;
                } else {
                    j++;
                    if (j == item.length()) {
                        encontrado  = true;
                    }
                }
            }
        }
        return encontrado;
    }

    public static void main(String[] args) {
        String text = "The cat in the hat.";
        
        System.out.println("isSubString(\"cat\", \"The cat in the hat.\") "
                + isSubString("cat", text));
        
        System.out.println("isSubString(\"bat\", \"The cat in the hat.\") "
                + isSubString("bat", text));
        
        System.out.println("isSubString(\"The\", \"The cat in the hat.\") "
                + isSubString("The", text));
        
        System.out.println("isSubString(\"hat.\", \"The cat in the hat.\") "
                + isSubString("hat.", text));
        
    }
}

Não entendi linha [color=red]12[/color]

else if ((i+j) >= line.length()) {

ou seja, porque (i+j) maior ou igual ao tamanho da linha, ele esta somando o tamanho da palavra com o tamanho da linha… sinceramente não consegui entender a lógica do negócio…

Bom… traduzindo ao pé da letra: se i+j for maior ou igual a quantidade de caracteres da String contida na variável “line”. o.O Era isso?

Não, o q não entendi foi o seguinte em “line.length” ele ja tem o tamanho total da String, não seria necessário apenas perguntar Se i >= line.Lenght(), ou seja se ele ja percorreu toda a String??

Esta certa a lógica…

pelo que pude enteder é assim.

ele vai comparando letra a letra, se a letra da line é igual a letra do item. (até ai tudo bem)

a variavel “i” vai controlar a letra em que esta sendo comparada da linha em relação ao item, sempre que ela for igual ao do item, o “J” vai receber mais um, para poder comparar se a prŕoxima letra da linha ainda é igual a próxima letra do item (neste momento se não ouver proxima letra na linha e não for feito o teste que você tem duvida da erro), assim quando “j” tiver o tamanho do item ele vai considerar que encontrou o item na linha.