Scanner.nextLine în Java

Citește tot restul rândului curent (cu spații cu tot) și returnează textul fără sfârșitul de rând.

Sintaxă
String nextLine()

Ce face Scanner.nextLine

nextLine() citește tot ce a mai rămas pe rândul curent, inclusiv spațiile, și trece la rândul următor. Caracterul de sfârșit de rând nu apare în rezultat. Este metoda potrivită pentru nume complete, adrese sau propoziții.

Capcana clasică: nextInt(), nextDouble() și next() citesc doar valoarea, nu și sfârșitul de rând de după ea. Un nextLine() imediat după ele găsește restul gol al rândului și returnează "". Soluția: un nextLine() în plus, ca să „consume” sfârșitul de rând, sau citești totul cu nextLine() și transformi cu Integer.parseInt.

Dacă nu mai există niciun rând, aruncă NoSuchElementException; verifică înainte cu hasNextLine().

Ce returnează

Rândul citit, ca String.

Exemple

Exemplul 1: Adresa completă, cu spații

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("Adresa: ");
        String adresa = sc.nextLine();
        System.out.print("Orașul: ");
        String oras = sc.nextLine();
        System.out.println();
        System.out.println("Livrăm la: " + adresa + ", " + oras);
    }
}

Ce scrie utilizatorul (intrare)

Str. Lăpușneanu nr. 12
Iași

Rezultat

Adresa: Orașul: 
Livrăm la: Str. Lăpușneanu nr. 12, Iași

Exemplul 2: Capcana nextInt urmat de nextLine

Prima citire a numelui dă text gol: nextInt() a lăsat necitit sfârșitul rândului cu vârsta, iar nextLine() l-a citit pe acela. Abia al doilea nextLine() dă numele. În a doua parte, un nextLine() pus intenționat după nextInt() rezolvă problema.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int varsta = sc.nextInt();
        String nume = sc.nextLine();
        System.out.println("Vârstă: " + varsta + ", nume: [" + nume + "]");
        nume = sc.nextLine();
        System.out.println("A doua încercare: [" + nume + "]");

        int an = sc.nextInt();
        sc.nextLine(); // consumă sfârșitul rândului
        String oras = sc.nextLine();
        System.out.println("An: " + an + ", oraș: [" + oras + "]");
    }
}

Ce scrie utilizatorul (intrare)

21
Ana
2026
Cluj-Napoca

Rezultat

Vârstă: 21, nume: []
A doua încercare: [Ana]
An: 2026, oraș: [Cluj-Napoca]

Greșeli frecvente

  • Folosești next() pentru un nume cu spațiu: primești doar primul cuvânt. Folosește nextLine().
  • Pui nextLine() imediat după nextInt() și primești un text gol. Consumă sfârșitul de rând sau citește totul pe rânduri.

Comenzi înrudite

  • Scanner: Citește text și numere de la tastatură, dintr-un String sau dintr-un fișier, bucată cu bucată; close îl închide.
  • Scanner.nextInt: Citește următorul număr întreg (nextInt) sau zecimal (nextDouble); dă eroare dacă textul nu este un număr.
  • Scanner.next: Citește următorul cuvânt (token), adică textul până la primul spațiu sau sfârșit de rând.
  • Scanner.hasNextLine: Verifică fără să citească: hasNextLine dacă mai există un rând, hasNextInt dacă următorul token este un număr întreg.
  • BufferedReader.readLine: Citește următorul rând de text, fără sfârșitul de rând; returnează null la sfârșitul sursei.