Чтение чисел и строк
nextInt, nextLine и подводные камни
«Чтение чисел и строк» — бесплатный урок Java Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Java Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Java Academy содержит 4 уроков всего.
Чтение чисел заданного типа
Scanner может считывать числа непосредственно с помощью методов, таких как nextInt и nextDouble. Они преобразуют следующий токен в соответствующий примитивный тип.
Чтение целого числа
nextInt() считывает следующий токен и возвращает его как значение типа int. Здесь используется фиксированная строка, поэтому пример запускается без ввода с клавиатуры.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("25");
int age = scanner.nextInt();
System.out.println(age + 1);
scanner.close();
}
}Чтение числа с плавающей точкой
nextDouble() считывает число с плавающей точкой. Затем его можно использовать в вычислениях.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("3.5");
double radius = scanner.nextDouble();
System.out.println(radius * 2);
scanner.close();
}
}Чтение нескольких чисел
Несколько последовательных операций чтения чисел извлекают токены один за другим, пропуская разделяющие их пробельные символы.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("10 20 30");
int a = scanner.nextInt();
int b = scanner.nextInt();
int c = scanner.nextInt();
System.out.println(a + b + c);
scanner.close();
}
}Суммирование до завершения ввода
Сочетайте hasNextInt() с nextInt(), чтобы считывать неизвестное заранее количество чисел.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("5 15 25 35");
int total = 0;
while (scanner.hasNextInt()) {
total += scanner.nextInt();
}
System.out.println(total);
scanner.close();
}
}Известная ловушка nextLine
Вот классическая ловушка: nextInt() считывает число, но оставляет символ перевода строки в буфере. Поэтому следующий вызов nextLine() считывает оставшуюся пустую строку, а не ожидаемый текст.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("42\nHello World");
int n = scanner.nextInt();
String line = scanner.nextLine();
System.out.println("Number: " + n);
System.out.println("Line: [" + line + "]");
scanner.close();
}
}Исправление ошибки
Исправление состоит в том, чтобы вызвать дополнительный nextLine() после nextInt(), чтобы поглотить оставшийся символ новой строки перед чтением настоящего ввода построчно.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("42\nHello World");
int n = scanner.nextInt();
scanner.nextLine();
String line = scanner.nextLine();
System.out.println("Number: " + n);
System.out.println("Line: [" + line + "]");
scanner.close();
}
}Чтение длинных чисел и логических значений
В Scanner также доступны nextLong, nextBoolean и другие методы. Каждый из них считывает токен соответствующего типа.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("9000000000 true");
long big = scanner.nextLong();
boolean flag = scanner.nextBoolean();
System.out.println(big);
System.out.println(flag);
scanner.close();
}
}Несоответствие типов вызывает исключение
Если следующий токен не является допустимым числом, nextInt выбрасывает исключение InputMismatchException. Если Вы не уверены в типе следующего токена, сначала всегда проверяйте его с помощью hasNextInt.
import java.util.InputMismatchException;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("abc");
try {
scanner.nextInt();
} catch (InputMismatchException e) {
System.out.println("Not an integer!");
}
scanner.close();
}
}Безопасное чтение чисел
Надёжный шаблон считывает значение только при наличии данных нужного типа; в противном случае он считывает и отбрасывает недопустимый токен.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("x 7 y 9");
int sum = 0;
while (scanner.hasNext()) {
if (scanner.hasNextInt()) {
sum += scanner.nextInt();
} else {
scanner.next();
}
}
System.out.println(sum);
scanner.close();
}
}Главные напоминания
Используйте nextInt и nextDouble для чисел, выполняйте проверку с помощью методов семейства hasNext и не забывайте поглощать оставшийся символ новой строки перед переключением на nextLine.
Быстрая проверка
Проверьте свои знания о чтении чисел и строк.
Итоги
Вы научились считывать числа и строки:
nextInt,nextDoubleиnextLongсчитывают числа соответствующего типа- Используйте цикл с
hasNextInt, если количество значений неизвестно - Ошибка с символом новой строки: вызывайте дополнительный
nextLineпослеnextInt - Недопустимые токены вызывают
InputMismatchException - Для безопасности проверяйте ввод с помощью методов семейства
hasNext
Часто задаваемые вопросы
Урок «Чтение чисел и строк» бесплатный?
Да — полный текст урока «Чтение чисел и строк» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Java Academy, подпишись на CoddyKit PRO. Курс Java Academy содержит 4 уроков всего.
Чему я научусь в уроке «Чтение чисел и строк»?
nextInt, nextLine и подводные камни Ты практикуешь Java Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Java Academy?
Предыдущий опыт не требуется. Java Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Чтение чисел и строк»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Java Academy?
Да. Каждый урок Java Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Чтение ввода с помощью Scanner
- Чтение чисел и строк
- Проверка ввода пользователя
- Альтернатива BufferedReader