Java中Scanner类的用法.doc
### Java中Scanner类的用法详解 #### 一、引言 `Scanner`类作为Java标准库中的一个重要组成部分,自JDK 1.5版本引入以来,在读取控制台输入及文件内容方面提供了极大的便利性。它融合了之前`StringTokenizer`与`Matcher`类的功能,并进一步扩展了对不同类型数据的支持。 #### 二、基本概念 `Scanner`类位于`java.util`包下,主要用于解析原始类型或字符串类型的输入。它能够灵活地根据正则表达式或者指定的分隔符来处理输入数据。 #### 三、构造方法 创建`Scanner`对象最常见的两种方式: 1. **从标准输入读取**:`new Scanner(System.in);` 2. **从文件读取**:`new Scanner(new File("path/to/file"));` #### 四、核心方法介绍 - **基本类型读取方法**: - `nextInt()`:读取下一个整数。 - `nextDouble()`:读取下一个浮点数。 - `nextBoolean()`:读取下一个布尔值。 - `nextByte()`:读取下一个字节。 - `nextShort()`:读取下一个短整型数。 - `nextLong()`:读取下一个长整型数。 - `nextFloat()`:读取下一个单精度浮点数。 - **字符串读取方法**: - `next()`:读取下一个标记(由空格分隔)。 - `nextLine()`:读取整个行。 - **判断方法**: - `hasNext()`:判断是否有下一个元素。 - `hasNextInt()`:判断是否还有下一个整数。 - `hasNextDouble()`:判断是否还有下一个双精度浮点数。 - `hasNextLine()`:判断是否还有下一行。 #### 五、使用示例 ##### 示例1:控制台输入处理 ```java import java.util.Scanner; public class Example { public static void main(String[] args) { Scanner reader = new Scanner(System.in); System.out.println("请输入一些数字,以非数字结束:"); double sum = 0; int count = 0; while (reader.hasNextDouble()) { double number = reader.nextDouble(); sum += number; count++; } if (count > 0) { System.out.println("总和:" + sum); System.out.println("平均值:" + (sum / count)); } else { System.out.println("未输入有效数字"); } } } ``` 该示例演示了如何使用`Scanner`类从标准输入读取一系列浮点数,并计算它们的总和与平均值。 ##### 示例2:文本文件读取与分析 ```java import java.util.Scanner; import java.io.File; import java.io.FileNotFoundException; public class ReadHumanInfo { public static void main(String[] args) { String filename = "hrinfo.txt"; try { Scanner scanner = new Scanner(new File(filename)); scanner.useDelimiter(System.getProperty("line.separator")); while (scanner.hasNext()) { parseLine(scanner.next()); } scanner.close(); } catch (FileNotFoundException e) { System.out.println("文件未找到: " + e.getMessage()); } } private static void parseLine(String line) { Scanner lineScanner = new Scanner(line); lineScanner.useDelimiter(","); while (lineScanner.hasNext()) { String data = lineScanner.next(); System.out.println(data); } lineScanner.close(); } } ``` 此示例展示了如何读取包含员工信息的文本文件,并逐行解析这些信息。 #### 六、注意事项 - 在使用完`Scanner`对象后,建议调用`close()`方法关闭资源。 - 当读取文件时,需要处理可能出现的`FileNotFoundException`异常。 - `useDelimiter()`方法用于设置分隔符,这对于正确解析输入非常重要。 - 正确理解`hasNext*()`系列方法的使用,可以帮助避免程序逻辑错误。 #### 七、总结 通过本文的学习,我们不仅了解了`Scanner`类的基本用法,还掌握了如何利用它来处理复杂的输入数据。无论是简单的命令行交互还是复杂的文本文件解析,`Scanner`都是一个非常实用且强大的工具。在未来开发过程中,熟练掌握其使用方法将大大提高编程效率。