Ce face System.in
System.in este un InputStream, adică un flux de octeți. Direct pe el poți citi doar octeți, așa că de obicei îl „îmbraci” într-o clasă care citește text: Scanner (simplu, știe să citească numere și cuvinte) sau BufferedReader (rapid, citește rând cu rând).
Intrarea se termină când utilizatorul apasă Ctrl+D (Linux, macOS) sau Ctrl+Z (Windows), ori când se termină fișierul trimis cu java Main < date.txt. Scanner.hasNextLine() returnează atunci false, iar BufferedReader.readLine() returnează null.
Ce returnează
Un InputStream legat de intrarea standard.
Exemple
Exemplul 1: Citire cu Scanner
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("Cum te numești? ");
String nume = in.nextLine();
System.out.print("Câți ani ai? ");
int varsta = in.nextInt();
System.out.println();
System.out.println("Salut, " + nume + "! Peste 10 ani vei avea " + (varsta + 10) + " de ani.");
}
}
Ce scrie utilizatorul (intrare)
Ana
21
Rezultat
Cum te numești? Câți ani ai?
Salut, Ana! Peste 10 ani vei avea 31 de ani.
Exemplul 2: Citire rând cu rând cu BufferedReader
Citim până la sfârșitul intrării și calculăm totalul cheltuielilor.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
double total = 0;
String linie;
while ((linie = in.readLine()) != null) {
String[] parti = linie.split(" ");
total += Double.parseDouble(parti[1]);
}
System.out.printf("Total: %.2f lei%n", total);
}
}
Ce scrie utilizatorul (intrare)
pâine 4.50
lapte 7.20
mere 9.80
Rezultat
Total: 21.50 lei
Greșeli frecvente
- Amesteci
nextInt()cunextLine(): dupănextInt(), rândul nou rămâne în buffer, iar următorulnextLine()returnează un șir gol. Citește tot cunextLine()și convertește cuInteger.parseInt. - Închizi un
Scannerfăcut peSystem.inși apoi creezi altul: închiderea închide șiSystem.in, iar citirile următoare eșuează. Creează un singurScannerpentru tot programul.
Comenzi înrudite
System: Clasa care leagă programul de sistem: ieșirea standard (out), ieșirea de erori (err), intrarea (in), timpul, variabilele și setările.Integer.parseInt: Transformă un text ca „42” în numărul întreg 42; valueOf face același lucru, dar returnează un obiect Integer.Double.parseDouble: Double este wrapperul pentru double; parseDouble și valueOf transformă un text ca „3.75” în număr cu zecimale.String.split: Împarte șirul în bucăți după un separator (expresie regulată) și returnează un array de String.