Scanner类
在 Java 中,Scanner
类位于 java.util
包下,它主要用于获取用户的输入或从文件、字符串等数据源中读取数据。Scanner
类提供了一系列方便的方法来解析基本数据类型和字符串,使得处理输入变得简单。以下是对 Scanner
类的详细介绍:
-
引入
Scanner
类
由于 Scanner
类在 java.util
包中,所以在使用之前需要进行导入:
import java.util.Scanner;
-
创建
Scanner
对象
Scanner
类有多个构造方法,常用的是将 System.in
作为参数来创建一个可以从标准输入(通常是键盘)读取数据的 Scanner
对象,示例如下:
java
Scanner scanner = new Scanner(System.in);
此外,还可以使用文件对象、字符串等作为参数创建 Scanner
对象,用于从文件或字符串中读取数据,示例如下:
java
import java.io.File; import java.io.FileNotFoundException; import java.util.Scanner; public class ScannerExample { public static void main(String[] args) { try { // 从文件中读取数据 File file = new File("example.txt"); Scanner fileScanner = new Scanner(file); // 从字符串中读取数据 String input = "Hello 123"; Scanner stringScanner = new Scanner(input); } catch (FileNotFoundException e) { e.printStackTrace(); } } }
-
常用方法
3.1 读取基本数据类型
-
nextInt()
:读取一个整数。 -
nextDouble()
:读取一个双精度浮点数。 -
nextBoolean()
:读取一个布尔值。 -
nextByte()
:读取一个字节类型的数据。 -
nextFloat()
:读取一个单精度浮点数。 -
nextLong()
:读取一个长整型数据。 -
nextShort()
:读取一个短整型数据。
示例代码:
java
import java.util.Scanner; public class ReadPrimitiveTypes { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入一个整数: "); int num = scanner.nextInt(); System.out.println("你输入的整数是: " + num); System.out.print("请输入一个双精度浮点数: "); double d = scanner.nextDouble(); System.out.println("你输入的双精度浮点数是: " + d); scanner.close(); } }
3.2 读取字符串
-
next()
:读取一个以空白字符(如空格、制表符、换行符等)分隔的字符串。 -
nextLine()
:读取一整行文本,直到遇到换行符为止。
示例代码:
java
import java.util.Scanner; public class ReadStrings { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入一个单词: "); String word = scanner.next(); System.out.println("你输入的单词是: " + word); System.out.print("请输入一行文本: "); // 消耗掉上一次输入遗留的换行符 scanner.nextLine(); String line = scanner.nextLine(); System.out.println("你输入的文本是: " + line); scanner.close(); } }
3.3 判断是否有输入
-
hasNext()
:判断是否还有下一个输入项,如果有则返回true
,否则返回false
。 -
hasNextInt()
:判断下一个输入项是否为整数,如果是则返回true
,否则返回false
。 -
类似的还有
hasNextDouble()
、hasNextBoolean()
等方法,用于判断下一个输入项是否为相应的数据类型。
示例代码:
java
import java.util.Scanner; public class CheckInput { public static void main(String[] args) { 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(); } }
-
关闭
Scanner
对象
当使用完 Scanner
对象后,应该用 close()
方法关闭它,以释放相关资源。特别是当 Scanner
对象是基于文件或其他资源创建时,关闭操作尤为重要。示例如下:
java
import java.util.Scanner; public class CloseScanner { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); // 使用 scanner 对象进行输入操作 scanner.close(); } }
注意事项
-
next()
和nextLine()
的混用问题:当使用next()
系列方法读取基本数据类型或字符串后,再使用nextLine()
读取一行文本时,可能会出现问题。因为next()
系列方法不会读取换行符,而nextLine()
会读取换行符,所以可能会导致nextLine()
读取到空行。解决方法是在使用nextLine()
之前,先调用一次nextLine()
来消耗掉遗留的换行符。 -
资源管理:如果
Scanner
对象是基于文件或其他外部资源创建的,在使用完后一定要调用close()
方法关闭,以避免资源泄漏。
通过 Scanner
类,Java 程序可以方便地与用户进行交互,获取用户输入的数据,从而实现更加灵活和实用的功能。