Статьи

Полный курс по языку Java — от установки JDK до многопоточности и HTTP-запросов

Ввод данных через Scanner

Страница 8 из 30 · 2026-10-25 · 3 мин чтения

Базовое использование

Класс Scanner из пакета java.util читает данные из консоли, файлов и строк.

import java.util.Scanner;public class Greeting {    public static void main(String[] args) {        Scanner scanner = new Scanner(System.in);        System.out.print("Введите имя: ");        String name = scanner.nextLine();        System.out.print("Введите возраст: ");        int age = scanner.nextInt();        System.out.println("Привет, " + name + "! Через год вам будет " + (age + 1));        scanner.close();    }}

System.in — стандартный поток ввода.

Методы чтения

МетодЧто читает
nextLine()строку целиком до перевода строки
next()одно слово до пробела
nextInt()целое
nextLong()длинное целое
nextDouble()дробное
nextBoolean()true или false

Проблема nextLine после nextInt

nextInt() не забирает символ перевода строки, поэтому следующий nextLine() вернет пустую строку.

import java.util.Scanner;public class NextLineTrap {    public static void main(String[] args) {        Scanner scanner = new Scanner(System.in);        System.out.print("Возраст: ");        int age = scanner.nextInt();        scanner.nextLine();        System.out.print("Имя: ");        String name = scanner.nextLine();        System.out.println(name + ", " + age);    }}

Лишний вызов scanner.nextLine() после числа очищает остаток строки. Надежнее читать всегда строкой и преобразовывать:

int age = Integer.parseInt(scanner.nextLine().trim());

Проверка ввода

Методы hasNextInt(), hasNextDouble() и аналоги проверяют, что дальше в потоке:

import java.util.Scanner;public class SafeInput {    public static void main(String[] args) {        Scanner scanner = new Scanner(System.in);        int number;        while (true) {            System.out.print("Введите целое число: ");            if (scanner.hasNextInt()) {                number = scanner.nextInt();                break;            }            System.out.println("Это не число, попробуйте еще раз.");            scanner.next();        }        System.out.println("Вы ввели: " + number);    }}

Несколько чисел в одной строке

import java.util.Scanner;public class SumLine {    public static void main(String[] args) {        Scanner scanner = new Scanner(System.in);        System.out.print("Введите три числа через пробел: ");        int a = scanner.nextInt();        int b = scanner.nextInt();        int c = scanner.nextInt();        System.out.println("Сумма: " + (a + b + c));    }}

Чтение до конца ввода

import java.util.Scanner;public class ReadAll {    public static void main(String[] args) {        Scanner scanner = new Scanner(System.in);        int total = 0;        while (scanner.hasNextInt()) {            total += scanner.nextInt();        }        System.out.println("Итого: " + total);    }}

Конец ввода в консоли: Ctrl+D в Linux и macOS, Ctrl+Z затем Enter в Windows.

Scanner для строки

import java.util.Scanner;public class ParseString {    public static void main(String[] args) {        Scanner scanner = new Scanner("10 20 30");        int sum = 0;        while (scanner.hasNextInt()) {            sum += scanner.nextInt();        }        System.out.println(sum);    }}

Закрытие Scanner

Если Scanner читает System.in, закрывать его нужно один раз в конце программы: закрытие закрывает и сам поток. Для файлов используйте try-with-resources, о нем в главе про исключения.

BufferedReader

Для больших объемов данных быстрее BufferedReader:

import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class FastInput {    public static void main(String[] args) throws IOException {        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));        String line = reader.readLine();        int number = Integer.parseInt(line.trim());        System.out.println(number * 2);    }}

BufferedReader читает только строки, преобразование типов выполняется вручную.