Scanner 的常用方法全面介绍
Java 中的 Scanner
类提供了多种方法来读取控制台输入(或从文件等流中读取数据)。以下是其常用方法及应用场景分类:
1. 读取基本数据类型
Scanner
提供方法可以直接读取 Java 基本数据类型。
方法 | 返回类型 | 功能 | 示例 |
---|---|---|---|
nextInt() | int | 读取整数 | int number = scan.nextInt(); |
nextByte() | byte | 读取字节值 | byte b = scan.nextByte(); |
nextShort() | short | 读取短整型 | short s = scan.nextShort(); |
nextLong() | long | 读取长整型 | long l = scan.nextLong(); |
nextFloat() | float | 读取单精度浮点数 | float f = scan.nextFloat(); |
nextDouble() | double | 读取双精度浮点数 | double d = scan.nextDouble(); |
nextBoolean() | boolean | 读取布尔值(true/false ) | boolean b = scan.nextBoolean(); |
2. 读取字符串和字符
用于读取文本输入。
方法 | 返回类型 | 功能 | 示例 |
---|---|---|---|
next() | String | 读取一个单词,以空白字符分隔 | String word = scan.next(); |
nextLine() | String | 读取整行,包括空格 | String line = scan.nextLine(); |
findInLine(String) | String | 查找并返回指定模式的下一个匹配子串 | String found = scan.findInLine("\\d+"); |
3. 检测输入合法性
在读取数据之前,检查输入是否符合预期类型。
方法 | 返回类型 | 功能 | 示例 |
---|---|---|---|
hasNext() | boolean | 检查是否还有下一个输入项 | while (scan.hasNext()) {} |
hasNextInt() | boolean | 检查是否是整数 | if (scan.hasNextInt()) {} |
hasNextLong() | boolean | 检查是否是长整型 | if (scan.hasNextLong()) {} |
hasNextDouble() | boolean | 检查是否是双精度浮点数 | if (scan.hasNextDouble()) {} |
hasNextLine() | boolean | 检查是否还有下一行 | if (scan.hasNextLine()) {} |
4. 文件定位和流控制
这些方法主要用于更复杂的数据流操作。
方法 | 返回类型 | 功能 | 示例 |
---|---|---|---|
useDelimiter(String) | Scanner | 自定义输入分隔符 | scan.useDelimiter(","); |
reset() | Scanner | 重置扫描器状态 | scan.reset(); |
close() | void | 关闭扫描器,释放资源 | scan.close(); |
5. 进阶匹配
允许通过正则表达式匹配输入内容。
方法 | 返回类型 | 功能 | 示例 |
---|---|---|---|
findInLine(String regex) | String | 在当前行查找正则表达式匹配项 | scan.findInLine("\\d+"); |
findWithinHorizon(String regex, int horizon) | String | 在指定范围内查找正则匹配项 | scan.findWithinHorizon("\\d+", 100); |
match() | MatchResult | 返回最近一次扫描的匹配结果 | MatchResult result = scan.match(); |
6. 示例代码
以下代码展示了上述方法的使用场景:
1. 读取各种数据类型
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入整数、浮点数和布尔值:");
int intVal = scan.nextInt();
double doubleVal = scan.nextDouble();
boolean boolVal = scan.nextBoolean();
System.out.println("整数:" + intVal);
System.out.println("浮点数:" + doubleVal);
System.out.println("布尔值:" + boolVal);
scan.close();
}
}
2. 检测输入合法性
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入整数:");
if (scan.hasNextInt()) {
int number = scan.nextInt();
System.out.println("您输入的整数是:" + number);
} else {
System.out.println("输入的不是一个整数!");
}
scan.close();
}
}
3. 自定义分隔符
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
String input = "apple,banana,grape";
Scanner scan = new Scanner(input);
scan.useDelimiter(",");
while (scan.hasNext()) {
System.out.println(scan.next());
}
scan.close();
}
}
总结
Scanner
提供丰富的输入方法,灵活且易用。掌握其基本与进阶用法,能够有效解决常见的输入问题,无论是处理简单的控制台输入还是复杂的文件数据解析。