0Pricing
Java Academy · 课时

读取行

readLine 与循环

读取行 是 CoddyKit 上的免费 Java Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Java Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Java Academy 课程共包含 4 节课。

readLine 方法

readLine() 是 BufferedReader 的核心。它会持续读取字符,直到遇到换行符(回车键),然后将这一行作为 String 返回。

返回的文本不包含换行符。本课将介绍如何读取单行和多行内容。

String line = br.readLine();

读取一行

下面是最简单的情况:读取姓名并打印问候语。readLine() 会阻塞(等待),直到用户按下回车键。

由于它从 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);

空行与空值

请注意:空行(用户只按下回车键)会返回 "",即一个空的 String,而不是 null。

因此,"".equals(line) 表示空行,而 line == null 表示输入确实已经结束。两者不是一回事。

if (line == null) {
    // input finished
} else if (line.isEmpty()) {
    // user pressed Enter on a blank line
}

不使用标准输入模拟行

如果不使用键盘输入,仍然可以通过使用 StringReader 为 BufferedReader 提供数据,来观察 readLine() 的运行方式。这个示例可以完整运行。

字符串中包含两行,它们由 \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 的可运行示例。下一步:将文本行转换为数字。

常见问题解答

「读取行」课时是免费的吗?

是的 — 「读取行」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Java Academy 课程的其余内容,请升级到 CoddyKit PRO。 Java Academy 课程共包含 4 节课。

「读取行」这节课中我会学到什么?

readLine 与循环 你通过在浏览器中直接运行的动手代码来练习 Java Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Java Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Java Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「读取行」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Java Academy 课中编写并运行代码吗?

能。每节 Java Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 为什么使用 BufferedReader
  2. 读取行
  3. 从输入中解析数字
  4. 安全关闭流
← 返回 Java Academy