Ce face Scanner.hasNextLine
hasNextLine() returnează true dacă mai există cel puțin un rând de citit. Este condiția obișnuită pentru a citi „până la sfârșit” dintr-un fișier sau de la intrarea standard: while (sc.hasNextLine()) { ... }.
hasNextInt() se uită la următorul token și spune dacă este un număr întreg valid, fără să-l consume. Este felul corect de a valida ce scrie utilizatorul: dacă nu e număr, îl citești cu next() și ceri din nou.
Când citești de la tastatură, aceste metode pot aștepta până utilizatorul scrie ceva. Ele returnează false doar la sfârșitul intrării (Ctrl+D pe Linux/macOS, Ctrl+Z pe Windows).
Ce returnează
true sau false.
Exemple
Exemplul 1: Citire până la sfârșitul intrării
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int nr = 0;
while (sc.hasNextLine()) {
String rand = sc.nextLine();
nr++;
System.out.println(nr + ". " + rand);
}
System.out.println("Total rânduri: " + nr);
}
}
Ce scrie utilizatorul (intrare)
pâine
lapte
ouă
Rezultat
1. pâine
2. lapte
3. ouă
Total rânduri: 3
Exemplul 2: Validare cu hasNextInt
Primele două răspunsuri nu sunt numere întregi; le citim cu next() și cerem din nou.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Câte bilete doriți?");
while (!sc.hasNextInt()) {
String gresit = sc.next();
System.out.println("„" + gresit + "” nu este un număr. Încercați din nou:");
}
int bilete = sc.nextInt();
System.out.println("Ați cumpărat " + bilete + " bilete, total " + bilete * 35 + " lei.");
}
}
Ce scrie utilizatorul (intrare)
două
2.5
3
Rezultat
Câte bilete doriți?
„două” nu este un număr. Încercați din nou:
„2.5” nu este un număr. Încercați din nou:
Ați cumpărat 3 bilete, total 105 lei.
Greșeli frecvente
- Combini
hasNextInt()cunextLine()în buclă: un rând cu „3 4” trece testul, darnextLine()citește tot rândul ca text. - Folosești
hasNext()ca să verifici un rând gol. Rândurile goale nu au token-uri;hasNextLine()le vede.
Comenzi înrudite
Scanner.nextInt: Citește următorul număr întreg (nextInt) sau zecimal (nextDouble); dă eroare dacă textul nu este un număr.Scanner.nextLine: Citește tot restul rândului curent (cu spații cu tot) și returnează textul fără sfârșitul de rând.Scanner: Citește text și numere de la tastatură, dintr-un String sau dintr-un fișier, bucată cu bucată; close îl închide.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.