使用 Scanner 读取输入
从 System.in 读取用户输入
使用 Scanner 读取输入 是 CoddyKit 上的免费 Java Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Java Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Java Academy 课程共包含 4 节课。
从键盘读取
为了读取用户输入的内容,Java 在 java.util 包中提供了 Scanner 类。您可以将它连接到 System.in,也就是标准输入流。
Scanner 可以简单地读取单词、行和数字。
创建 Scanner
传入 System.in 即可构造一个 Scanner。这里的示例使用固定字符串,因此无需输入即可运行,但相同的方法也适用于键盘输入。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("Hello");
String word = scanner.next();
System.out.println(word);
scanner.close();
}
}读取单个单词
next() 会读取一个令牌,也就是读取直到下一个空白字符之前的文本。空格和换行会分隔令牌。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("apple banana cherry");
System.out.println(scanner.next());
System.out.println(scanner.next());
scanner.close();
}
}读取整行
nextLine() 会读取直到行尾的全部内容,包括空格。当输入包含多个需要一起处理的单词时,请使用它。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("John Smith");
String fullName = scanner.nextLine();
System.out.println("Name: " + fullName);
scanner.close();
}
}检查是否还有输入
只要还有更多令牌,hasNext() 就会返回 true。这样您就可以循环读取,直到输入耗尽。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("red green blue");
while (scanner.hasNext()) {
System.out.println(scanner.next());
}
scanner.close();
}
}逐行读取
将 hasNextLine() 与 nextLine() 配合使用,可以一次读取一行来处理多行输入。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("line one\nline two\nline three");
while (scanner.hasNextLine()) {
System.out.println("> " + scanner.nextLine());
}
scanner.close();
}
}实际键盘示例
对于实际的用户输入,您可以编写下面的代码行。请在本地尝试:程序会在 nextLine 处等待,直到您输入内容并按下 Enter 键。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Enter your name: ");
String name = scanner.nextLine();
System.out.println("Hello, " + name);
scanner.close();
}
}关闭 Scanner
调用 close() 可以释放资源。更简洁的方式是使用 try-with-resources,这样代码块结束时会自动关闭 Scanner。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
try (Scanner scanner = new Scanner("data here")) {
System.out.println(scanner.next());
}
}
}next 与 nextLine 的区别
请记住关键区别:next() 会在空白字符处停止并返回一个令牌,而 nextLine() 会读取当前行的剩余内容。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("first second third");
System.out.println(scanner.next());
System.out.println(scanner.nextLine());
scanner.close();
}
}自定义分隔符
您可以使用 useDelimiter 更改令牌之间的分隔方式。在这里,值之间使用逗号而不是空白字符进行分隔。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("a,b,c");
scanner.useDelimiter(",");
while (scanner.hasNext()) {
System.out.println(scanner.next());
}
scanner.close();
}
}Scanner 基础
在 System.in 上创建一个 Scanner,使用 next 读取单词,使用 nextLine 读取整行,使用 hasNext 系列方法循环读取,并始终将其关闭。
快速检查
请检验您对 Scanner 基础知识的掌握情况。
回顾
您已经学习了如何使用 Scanner 读取输入:
- 使用
new Scanner(System.in)创建它 next()读取一个单词,nextLine()读取整行- 使用
hasNext()或hasNextLine()循环读取 - 使用
close()或 try-with-resources 将其关闭 useDelimiter可以更改令牌分隔符
常见问题解答
「使用 Scanner 读取输入」课时是免费的吗?
是的 — 「使用 Scanner 读取输入」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Java Academy 课程的其余内容,请升级到 CoddyKit PRO。 Java Academy 课程共包含 4 节课。
「使用 Scanner 读取输入」这节课中我会学到什么?
从 System.in 读取用户输入 你通过在浏览器中直接运行的动手代码来练习 Java Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Java Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Java Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「使用 Scanner 读取输入」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Java Academy 课中编写并运行代码吗?
能。每节 Java Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 使用 Scanner 读取输入
- 读取数字与行
- 验证用户输入
- BufferedReader 替代方案