Prima di tutto tentiamo di spiegare perchè esce 4 che è proprio la dimensione di esci:

quando scrivi:
codice:
.....
do {
	     //acquisisce le righe
	     System.out.println("Scrivi la riga qui: ");
	     line = input.readLine();
	     i = line.length(); // memorizza la lunghezza della stringa
	     }
}
while (!line.equals("esci"));
 { 	     
System.out.println("Fine stringhe. La stringa piu' lunga che hai scritto e' di: " + i + " caratteri.");
	     }
...
sarà stamapata il valore di i il quale è la dimensione della riga "corrente" cioè quella che hai appeno digitato ( ogni volta che digiti una nuova riga sovrascrivi il valore contenuto in i ad esempio la prima volta scrivi car ->i=3 la seconda volta giochi->i=6 e così via)
Potresti risolvere il tuo problema in diversi modi ad esempio potresti inserire qualcosa del tipo
codice:
int max_lenght = 0
if(max_lenght<i){
max_lenght = i;
}

....

System.out.println("Fine stringhe. La stringa piu' lunga che hai scritto e' di: " + max_lenght + " caratteri.");
quindi in max_lenght ti ritroverai la stringa con lunghezza massima
un'altra soluzione che forse è migliore è quella di crearti un vettore di stringhe nel quale inserisci le stringhe che digiti e poi fare un controllo per trovare quale è la string più lunga.
Avendo a disposizione il vettore con tutte le stringhe potrai eseguire anche altre operazioni su di esse.

codice:
int K= 0;
int NMAX = 20; numero massimo di stringhe che scriverai
String [] lines = new String[NMAX]  
do {
	     //acquisisce le righe
	     System.out.println("Scrivi la riga qui: ");
	     lines[K] = input.readLine();
	      k++;
	     }
}
while (!line[k-1].equals("esci"));
una volta che hai tutte le stringhe nel tuo vettore ti scrivi un bel metodo che fa la ricerca della stringa più lunga all'interno del vettore lines...potresti iniziare da solo