Te recomendamos que pruebes esta resolución en un ambiente controlado antes de pasarlo a producción, saludos.
Solución:
Sigues recibiendo nuevos y nuevos string y continuar el bucle si no está vacío. Simplemente inserte un control en el ciclo para una salida string.
while(!s1.equals("exit") && sc.hasNext())
// operate
Si desea declarar el string dentro del bucle y no hacer las operaciones en el cuerpo del bucle si el string es “salir”:
while(sc.hasNext())
String s1 = sc.next();
if(s1.equals("exit"))
break;
//operate
los Scanner
continuará leyendo hasta que encuentre una condición de “fin de archivo”.
Mientras lees de stdin
eso será cuando envíe un carácter EOF (generalmente ^d
en Unix), o al final del archivo si usa <
redirección de estilo.
Cuando usa el escáner, como lo menciona Alnitak, solo obtiene 'false' para hasNext() cuando tiene un carácter EOF, básicamente... No puede enviar fácilmente un carácter EOF usando el teclado, por lo tanto, en situaciones como esta, es común tener un carácter o palabra especial que puede enviar para detener la ejecución, por ejemplo:
String s1 = sc.next();
if (s1.equals("exit"))
break;
Break te sacará del bucle.
Agradecemos que desees añadir valor a nuestra información aportando tu experiencia en las aclaraciones.