目录
1. Scanner 类简介
Scanner
类是 Java java.util
包中的一个实用工具类,用于读取 用户输入、文件、字符串等数据。它支持多种数据类型(整数、浮点数、字符串等),并提供了简单的方法来解析输入。
导入 Scanner 类
import java.util.Scanner;
2. Scanner 的基本用法
创建 Scanner
对象可以从 标准输入(键盘)、文件、字符串等 读取数据:
Scanner scanner = new Scanner(System.in); // 读取用户输入
3. 从控制台读取用户输入
Scanner
可以从键盘读取 整数、浮点数、字符串 等数据。
3.1 读取整数
import java.util.Scanner;
public class ScannerExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个整数: ");
int number = scanner.nextInt();
System.out.println("你输入的整数是: " + number);
scanner.close();
}
}
3.2 读取字符串
System.out.print("请输入一行文本: ");
String text = scanner.nextLine();
System.out.println("你输入的是: " + text);
4. 从文件读取数据
Scanner
也可以用于 从文件中读取数据。
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class ReadFileExample {
public static void main(String[] args) {
try {
File file = new File("example.txt");
Scanner scanner = new Scanner(file);
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
System.out.println(line);
}
scanner.close();
} catch (FileNotFoundException e) {
System.out.println("文件未找到");
}
}
}
5. 从字符串读取数据
import java.util.Scanner;
public class StringScannerExample {
public static void main(String[] args) {
String data = "Java 100 3.14 true";
Scanner scanner = new Scanner(data);
String word = scanner.next(); // 读取 "Java"
int number = scanner.nextInt(); // 读取 100
double decimal = scanner.nextDouble(); // 读取 3.14
boolean bool = scanner.nextBoolean(); // 读取 true
System.out.println("字符串: " + word);
System.out.println("整数: " + number);
System.out.println("小数: " + decimal);
System.out.println("布尔值: " + bool);
scanner.close();
}
}
6. Scanner 常用方法
方法 | 作用 |
---|---|
next() | 读取 一个 单词(遇到空格停止) |
nextLine() | 读取 一整行 |
nextInt() | 读取 整数 |
nextDouble() | 读取 双精度浮点数 |
nextBoolean() | 读取 布尔值(true/false) |
hasNextInt() | 判断 是否有下一个整数 |
hasNextDouble() | 判断 是否有下一个浮点数 |
示例:
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个整数: ");
if (scanner.hasNextInt()) {
int num = scanner.nextInt();
System.out.println("输入的整数是: " + num);
} else {
System.out.println("输入的不是整数");
}
scanner.close();
7. 使用分隔符
默认情况下,Scanner
使用 空格、换行符、Tab 作为分隔符,但可以自定义分隔符:
import java.util.Scanner;
public class ScannerDelimiterExample {
public static void main(String[] args) {
String data = "Java,Python,C++";
Scanner scanner = new Scanner(data);
scanner.useDelimiter(",");
while (scanner.hasNext()) {
System.out.println(scanner.next());
}
scanner.close();
}
}
输出
Java
Python
C++
8. Scanner 读取换行问题
在读取 nextInt()
或 nextDouble()
后直接调用 nextLine()
可能会跳过输入,因为 nextInt()
读取完后,Enter
仍留在输入缓冲区,需要额外处理。
import java.util.Scanner;
public class ScannerBugExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入年龄: ");
int age = scanner.nextInt();
scanner.nextLine(); // 解决换行问题
System.out.print("请输入姓名: ");
String name = scanner.nextLine();
System.out.println("姓名: " + name + ", 年龄: " + age);
scanner.close();
}
}
发表回复