读取行
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 反馈 — 无需本地设置。