Scanner
Scanner — класс для чтения данных (чисел, слов, строк) из разных источников: консоль, файл, строка и т.п.
- Методы чтения:
nextInt(),nextDouble(),next(),nextLine()и др. - Важно аккуратно работать с
nextLine()после числовых методов (см. ниже).
Создание объекта Scanner
Подключение класса:
Создание для чтения с консоли:
Другие варианты (для общих сведений):
Scanner inFile = new Scanner(new File("input.txt")); // чтение из файла
Scanner inStr = new Scanner("10 20 30"); // чтение из строки
Для работы с файлами дополнительно нужны import java.io.File; и обработка исключений, это выносится в отдельные шаблоны.
Основные методы чтения
Числа
| Сигнатура | Что читает |
|---|---|
int nextInt() |
Целое число (int). |
long nextLong() |
Целое число (long). |
double nextDouble() |
Число с плавающей точкой. |
Пример:
Слова и строки
| Сигнатура | Что читает |
|---|---|
String next() |
Следующее «слово» (до пробела/перевода строки). |
String nextLine() |
Весь остаток строки до перевода строки (может быть пустым). |
Пример:
Важный момент: nextLine() после чисел
После вызова nextInt(), nextDouble() и других числовых методов в потоке может оставаться перевод строки.
Если сразу вызвать nextLine(), он прочитает именно этот пустой остаток строки.
Типичный приём:
int n = in.nextInt();
in.nextLine(); // читаем конец строки после числа
String line = in.nextLine(); // теперь читаем уже «настоящую» строку
Проверка наличия данных
Методы hasNext...() позволяют проверить, есть ли в потоке ещё данные нужного типа:
| Сигнатура | Что проверяет |
|---|---|
boolean hasNext() |
Есть ли ещё какой-то токен. |
boolean hasNextInt() |
Есть ли целое число (int). |
boolean hasNextDouble() |
Есть ли число double. |
boolean hasNextLine() |
Есть ли следующая строка. |
Пример чтения до конца входа:
Примеры использования
Шаблон для чтения двух чисел и вывода суммы
import java.util.Scanner;
public class SumExample {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int a = in.nextInt();
int b = in.nextInt();
int sum = a + b;
System.out.println(sum);
}
}
Чтение числа, а потом строки
import java.util.Scanner;
public class NumberAndLineExample {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
in.nextLine(); // убираем перевод строки после числа
String text = in.nextLine(); // читаем строку целиком
System.out.println("n = " + n);
System.out.println("text = " + text);
}
}
Полный API
Полный список методов и деталей реализации см. в официальной документации Java для класса java.util.Scanner (Java SE 11).