Java java.util.Scanner 使用教程
Scanner
类是 Java 中一个非常实用的工具,用于解析基本类型和字符串的简单文本扫描器。它可以将输入分解为标记(tokens),然后使用各种 next
方法将其转换为不同的数据类型。
1. 基本使用步骤
1.1 导入 Scanner 类
import java.util.Scanner; // 必须导入
1.2 创建 Scanner 对象
Scanner scanner = new Scanner(System.in); // 从标准输入读取
1.3 读取输入
System.out.print("请输入一个整数: ");
int num = scanner.nextInt(); // 读取整数
1.4 关闭 Scanner
scanner.close(); // 使用完毕后关闭
2. 常用方法
2.1 读取基本类型
方法 | 描述 |
---|---|
nextInt() | 读取一个 int 值 |
nextDouble() | 读取一个 double 值 |
nextFloat() | 读取一个 float 值 |
nextLong() | 读取一个 long 值 |
nextShort() | 读取一个 short 值 |
nextByte() | 读取一个 byte 值 |
nextBoolean() | 读取一个 boolean 值 |
2.2 读取字符串
方法 | 描述 |
---|---|
next() | 读取一个单词(以空白符分隔) |
nextLine() | 读取一行文本(直到换行符) |
3. 使用示例
3.1 读取不同类型输入
Scanner scanner = new Scanner(System.in);System.out.print("请输入您的姓名: ");
String name = scanner.nextLine();System.out.print("请输入您的年龄: ");
int age = scanner.nextInt();System.out.print("请输入您的身高(m): ");
double height = scanner.nextDouble();System.out.println("姓名: " + name);
System.out.println("年龄: " + age);
System.out.println("身高: " + height + "m");scanner.close();
3.2 处理多个输入
Scanner scanner = new Scanner(System.in);System.out.println("请输入三个数字,用空格分隔:");
int a = scanner.nextInt();
int b = scanner.nextInt();
int c = scanner.nextInt();System.out.println("三个数字的和是: " + (a + b + c));scanner.close();
3.3 循环读取输入
Scanner scanner = new Scanner(System.in);
System.out.println("请输入多个数字,输入非数字结束:");while(scanner.hasNextInt()) {int num = scanner.nextInt();System.out.println("读取到数字: " + num);
}System.out.println("输入结束");
scanner.close();
4. 注意事项
-
nextLine()
陷阱:- 在
nextInt()
或nextDouble()
等之后调用nextLine()
可能会跳过输入 - 解决方法:在调用
nextLine()
前添加一个额外的nextLine()
消耗换行符
Scanner scanner = new Scanner(System.in);System.out.print("请输入年龄: "); int age = scanner.nextInt();scanner.nextLine(); // 消耗换行符System.out.print("请输入姓名: "); String name = scanner.nextLine();scanner.close();
- 在
-
输入验证:
- 使用
hasNextXxx()
方法检查输入是否有效 - 例如
hasNextInt()
检查是否有整数输入
Scanner scanner = new Scanner(System.in);System.out.print("请输入一个整数: "); while(!scanner.hasNextInt()) {System.out.println("输入无效,请重新输入整数: ");scanner.next(); // 消耗无效输入 } int num = scanner.nextInt();scanner.close();
- 使用
-
资源管理:
- 使用 try-with-resources 自动关闭 Scanner
- 推荐方式:
try (Scanner scanner = new Scanner(System.in)) {System.out.print("请输入内容: ");String input = scanner.nextLine();System.out.println("您输入的是: " + input); }
5. 高级用法
5.1 使用分隔符
String input = "apple,orange,banana";
Scanner scanner = new Scanner(input);
scanner.useDelimiter(","); // 设置逗号为分隔符while(scanner.hasNext()) {System.out.println(scanner.next());
}scanner.close();
5.2 从文件读取
try (Scanner fileScanner = new Scanner(new File("data.txt"))) {while(fileScanner.hasNextLine()) {System.out.println(fileScanner.nextLine());}
} catch (FileNotFoundException e) {System.out.println("文件未找到");
}
5.3 从字符串读取
String data = "1 2 3 4 5";
Scanner stringScanner = new Scanner(data);int sum = 0;
while(stringScanner.hasNextInt()) {sum += stringScanner.nextInt();
}System.out.println("总和: " + sum);
stringScanner.close();
6. 总结
Scanner
类是 Java 中处理输入的强大工具,可以:
- 从控制台、文件或字符串读取输入
- 将输入转换为各种数据类型
- 使用分隔符解析复杂输入
记住要:
- 总是导入
java.util.Scanner
- 处理完输入后关闭 Scanner
- 注意
nextLine()
的使用陷阱 - 对用户输入进行验证
通过灵活使用 Scanner,可以轻松处理各种输入场景。