Scanner.next în Java

Citește următorul cuvânt (token), adică textul până la primul spațiu sau sfârșit de rând.

Sintaxă
String next()
boolean hasNext()
Scanner useDelimiter(String model)

Ce face Scanner.next

next() sare peste spațiile de la început și returnează textul până la următorul separator. Implicit separatorii sunt spațiile, tab-urile și sfârșiturile de rând, deci next() dă câte un cuvânt.

Cu useDelimiter(...) schimbi separatorul, de exemplu useDelimiter(",") pentru valori despărțite prin virgulă. hasNext() spune dacă mai există vreun token. Dacă nu mai există, next() aruncă NoSuchElementException.

Ce returnează

Token-ul citit, ca String.

Exemple

Exemplul 1: Prenume și nume pe același rând

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String prenume = sc.next();
        String nume = sc.next();
        System.out.println("Prenume: " + prenume);
        System.out.println("Nume: " + nume.toUpperCase());
    }
}

Ce scrie utilizatorul (intrare)

Ioana   Ionescu

Rezultat

Prenume: Ioana
Nume: IONESCU

Exemplul 2: Cuvinte numărate și separator propriu

Primul scanner numără cuvintele; al doilea folosește ; ca separator.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner cuvinte = new Scanner("Ana are mere\n și pere");
        int n = 0;
        while (cuvinte.hasNext()) {
            cuvinte.next();
            n++;
        }
        System.out.println("Cuvinte: " + n);

        Scanner csv = new Scanner("Iași;Cluj-Napoca;Baia Mare").useDelimiter(";");
        while (csv.hasNext()) {
            System.out.println("- " + csv.next());
        }
        cuvinte.close();
        csv.close();
    }
}

Rezultat

Cuvinte: 5
- Iași
- Cluj-Napoca
- Baia Mare

Greșeli frecvente

  • Folosești next() pentru un text cu spații (de exemplu „Baia Mare”): primești doar „Baia”. Folosește nextLine() sau schimbă separatorul.

Comenzi înrudite

  • 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.nextInt: Citește următorul număr întreg (nextInt) sau zecimal (nextDouble); dă eroare dacă textul nu este un număr.
  • Scanner: Citește text și numere de la tastatură, dintr-un String sau dintr-un fișier, bucată cu bucată; close îl închide.
  • String.split: Împarte șirul în bucăți după un separator (expresie regulată) și returnează un array de String.