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ștenextLine(). - 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.