Чтение строк
readLine и циклы
«Чтение строк» — бесплатный урок Java Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Java Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Java Academy содержит 4 уроков всего.
Метод readLine
readLine() — основной метод BufferedReader. Он читает символы, пока не встретит разрыв строки (Enter), а затем возвращает строку как String.
Возвращаемый текст не включает символ новой строки. В этом уроке мы прочитаем одну и несколько строк.
String line = br.readLine();Чтение одной строки
Вот самый простой случай: прочитать имя и вывести приветствие. Метод readLine() блокирует выполнение (ожидает), пока пользователь не нажмёт Enter.
Поскольку он читает из System.in, этот фрагмент приостанавливается в ожидании ввода с клавиатуры, поэтому здесь он не запускается автоматически.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
String name = br.readLine();
System.out.println("Welcome, " + name + "!");
}
}Что возвращает readLine в конце
Когда ввод заканчивается (достигнут конец потока или пользователь подал сигнал EOF), readLine() возвращает null, а не String.
Это важный сигнал: проверка на null позволяет понять, что нужно прекратить чтение.
String line = br.readLine();
if (line == null) {
System.out.println("No more input.");
}Чтение до EOF
Чтобы прочитать каждую строку до конца ввода, выполняйте цикл, пока readLine() не равен null. Этот распространённый шаблон одновременно присваивает значение и проверяет его в одном условии.
На каждой итерации Вы получаете следующую строку, пока значение null корректно не остановит цикл.
String line;
while ((line = br.readLine()) != null) {
System.out.println("Got: " + line);
}Чтение нескольких строк
Вот полноценная программа, которая выводит обратно каждую введённую Вами строку, пока поток не закончится.
Она читает из System.in, поэтому ожидает ввода и не запускается автоматически, но шаблон цикла можно использовать без изменений.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
String line;
while ((line = br.readLine()) != null) {
System.out.println("Echo: " + line);
}
}
}Подсчёт строк
Внутри цикла можно выполнять разные действия, например вести подсчёт. Здесь мы считаем, сколько строк поступило.
На каждой итерации считывается новая строка и увеличивается счётчик. Когда ввод заканчивается, мы выводим итоговое количество.
int count = 0;
String line;
while ((line = br.readLine()) != null) {
count++;
}
System.out.println("Lines read: " + count);Пустые строки и null
Будьте внимательны: пустая строка (пользователь просто нажал Enter) возвращается как "", пустой String, а не как null.
Поэтому "".equals(line) означает пустую строку, а line == null — что ввод действительно закончился. Это разные ситуации.
if (line == null) {
// input finished
} else if (line.isEmpty()) {
// user pressed Enter on a blank line
}Имитация строк без stdin
Чтобы увидеть работу readLine() без ввода с клавиатуры, можно передать данные в BufferedReader из StringReader. Такой пример полностью запускается.
Строка содержит две строки, разделённые символами \n, а цикл выводит каждую из них.
import java.io.BufferedReader;
import java.io.StringReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br =
new BufferedReader(new StringReader("apple\nbanana"));
String line;
while ((line = br.readLine()) != null) {
System.out.println("Fruit: " + line);
}
}
}Удаление пробельных символов
Во вводе часто встречаются лишние пробелы. Используйте trim(), чтобы удалить пробельные символы в начале и конце строки перед её использованием.
Это делает сравнение и разбор данных надёжнее, особенно если пользователь случайно добавил пробелы.
import java.io.BufferedReader;
import java.io.StringReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br =
new BufferedReader(new StringReader(" hello \n"));
String line = br.readLine().trim();
System.out.println("[" + line + "]");
}
}Чтение фиксированного числа строк
Иногда количество строк заранее известно. Цикл for считывает ровно указанное количество строк.
Это распространённый случай, когда в условии сказано: “первое число сообщает, сколько строк следует далее”.
for (int i = 0; i < 3; i++) {
String item = br.readLine();
System.out.println(i + ": " + item);
}Основные правила работы с readLine
Запомните следующие правила:
- Всегда проверяйте значение
null, прежде чем использовать строку. - Вызывайте
trim(), если лишние пробелы могут привести к ошибкам. - Пустая строка — не то же самое, что
null.
Далее мы превратим эти строки в числа.
Быстрая проверка
Что возвращает readLine(), когда поток ввода достиг конца?
Итоги
Вы научились читать отдельные строки, организовывать цикл с помощью while ((line = br.readLine()) != null) и отличать пустую строку ("") от конца ввода (null).
Вы также увидели запускаемые примеры с использованием StringReader. Далее: преобразование текстовых строк в числа.
Часто задаваемые вопросы
Урок «Чтение строк» бесплатный?
Да — полный текст урока «Чтение строк» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Java Academy, подпишись на CoddyKit PRO. Курс Java Academy содержит 4 уроков всего.
Чему я научусь в уроке «Чтение строк»?
readLine и циклы Ты практикуешь Java Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Java Academy?
Предыдущий опыт не требуется. Java Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Чтение строк»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Java Academy?
Да. Каждый урок Java Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.