Scanner.hasNextLine în Java

Verifică fără să citească: hasNextLine dacă mai există un rând, hasNextInt dacă următorul token este un număr întreg.

Sintaxă
boolean hasNextLine()
boolean hasNextInt()

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() cu nextLine() în buclă: un rând cu „3 4” trece testul, dar nextLine() 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.