HOWTO · Java
Diferença entre os métodos next() e nextLine() da classe Java Scanner
Saiba quando usar Scanner.next() para um token e Scanner.nextLine() para o restante de uma linha, incluindo o que acontece quando você os combina.
Nesta página
Scanner.next() lê um token, enquanto Scanner.nextLine() retorna o restante da linha atual, incluindo os espaços. Use next() para entradas separadas pelo delimitador do scanner (espaços em branco por padrão) e nextLine() quando a linha inteira for um único valor.
O método next() em Java Scanner
next() retorna o próximo token de acordo com o delimitador de Scanner. Com o delimitador padrão, os espaços em branco — incluindo espaços, tabulações e quebras de linha — separam os tokens. Por exemplo, para Welcome To Party, a primeira chamada a next() retorna Welcome.
Este programa independente usa uma linha de exemplo fixa e imprime o primeiro token:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("Welcome To Party");
System.out.println(scanner.next());
scanner.close();
}
}
Welcome
O método nextLine() em Java Scanner
nextLine() retorna o restante da linha atual, preservando os espaços nesse texto, e consome o separador da linha. Se a entrada for Welcome To, seguida de uma quebra de linha e de Party, uma chamada retorna Welcome To; uma chamada posterior pode ler Party.
Este programa lê e imprime a primeira linha completa de uma amostra fixa:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("Welcome To\nParty\n");
System.out.println(scanner.nextLine());
scanner.close();
}
}
Welcome To
Diferença entre os métodos next() e nextLine() em Java
| Comportamento | next() |
nextLine() |
|---|---|---|
| Retorna | O próximo token, conforme definido pelo delimitador atual | O restante da linha atual, incluindo os espaços internos |
| Para em | No próximo delimitador; por padrão, em qualquer espaço em branco | No separador da linha, que é consumido |
| Uso comum | Um valor, como um nome ou número, separado de outras entradas | Uma linha completa, como o nome completo de alguém ou uma frase |
Depois de uma chamada que lê um token, next() ainda não consumiu o restante daquela linha, incluindo o separador de linha. Por isso, uma chamada seguinte a nextLine() retorna o restante dessa mesma linha; se só restar o separador, o resultado será uma string vazia. Para ler a próxima linha completa, chame nextLine() uma vez para consumir o restante e, em seguida, chame-o novamente para ler a linha seguinte.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("42\nAda Lovelace\n");
String number = scanner.next();
String restOfFirstLine = scanner.nextLine();
String fullName = scanner.nextLine();
System.out.println(number);
System.out.println(restOfFirstLine.isEmpty());
System.out.println(fullName);
scanner.close();
}
}
42
true
Ada Lovelace