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