Como terminar o scanner quando a input estiver concluída?

public static void main(String[] args) { Scanner scan = new Scanner(System.in); try { while (scan.hasNextLine()){ String line = scan.nextLine().toLowerCase(); System.out.println(line); } } finally { scan.close(); } } 

Só estou querendo saber como posso terminar o programa depois de concluir a inserção das inputs? Como o scanner ainda continuaria depois de vários “Enter”, supondo que eu continuaria inserindo inputs … Eu tentei:

 if (scan.nextLine() == null) System.exit(0); 

e

 if (scan.nextLine() == "") System.exit(0); 

Eles não funcionaram …. O programa continua e mexe com a intenção original,

O problema é que um programa (como o seu) não sabe que o usuário concluiu a input de dados, a menos que o usuário … de alguma forma … diga isso.

Existem duas maneiras de o usuário fazer isso:

  • Digite um marcador “fim do arquivo”. No UNIX, isso é (normalmente) CTRL + D e no Windows CTRL + Z. Isso resultará em hasNextLine() retornando false .

  • Insira alguma input especial que seja reconhecida pelo programa como “estou pronto”. Por exemplo, pode ser uma linha vazia ou algum valor especial como “sair”. O programa precisa testar isso especificamente.

(Você também pode usar um timer e assumir que o usuário terminou se não inserir nenhuma input por N segundos ou N minutos. Mas essa não é uma maneira amigável para fazer isso.)


A razão pela qual sua versão atual está falhando é que você está usando == para testar uma String vazia. Você deve usar os methods equals ou isEmpty . (Veja Como eu comparo strings em Java? )

Outras coisas a serem consideradas são a diferenciação entre maiúsculas e minúsculas (por exemplo, “saída” versus “Saída”) e os efeitos de espaço em branco inicial ou final (por exemplo, “saída” versus “saída”).

A comparação de strings é feita usando .equals() e não == .

Portanto, tente scan.nextLine().equals("") .

Você terá que procurar um padrão específico que indique o final de sua input, por exemplo, “##”

 // TODO Auto-generated method stub Scanner scan = new Scanner(System.in); try { while (scan.hasNextLine()){ String line = scan.nextLine().toLowerCase(); System.out.println(line); if (line.equals("##")) { System.exit(0); scan.close(); } } } finally { if (scan != null) scan.close(); } 

Com essa abordagem, você precisa criar explicitamente um comando de saída ou uma condição de saída. Por exemplo:

 String str = ""; while(scan.hasNextLine() && !((str = scan.nextLine()).equals("exit")) { //Handle string } 

Além disso, você deve manipular string igual a casos com .equals() não == . == compara os endereços de duas strings, que, a menos que sejam o mesmo object, nunca serão verdadeiras.

Nesse caso, recomendo que você use do, enquanto loop em vez de while.

  Scanner sc = new Scanner(System.in); String input = ""; do{ input = sc.nextLine(); System.out.println(input); } while(!input.equals("exit")); sc.close(); 

Para sair do programa, basta atribuir um header de string, por exemplo, exit. Se a input for igual a sair, o programa irá sair. Além disso, os usuários podem pressionar control + c para sair do programa.

Você pode verificar a próxima linha de input do console e verificar sua input de finalização (se houver).

Suponha que sua input de término seja “encerrada”, então você deve tentar este código: –

 Scanner scanner = new Scanner(System.in); try { while (scanner.hasNextLine()){ // do your task here if (scanner.nextLine().equals("quit")) { scanner.close(); } } }catch(Exception e){ System.out.println("Error ::"+e.getMessage()); e.printStackTrace(); }finally { if (scanner!= null) scanner.close(); } 

Tente este código. Sua linha de término deve ser inserida por você quando você quiser fechar / terminar o scanner.