Java Scanner 类


Java Scanner类技术文档

场景

当我们需要从输入流中读取数据时,Scanner类是Java中常用的工具类之一。例如,从键盘输入,从文件读取数据等等。

创建Scanner对象

这里使用Scanner类来读取文件中的数据为例,创建Scanner对象有以下两种方式:

1. 读入文件路径

Scanner scan = new Scanner(new File("file.txt"));

2. 读入文件输入流

Scanner scan = new Scanner(new FileInputStream("file.txt"));

读取数据

1. 读取字符串

从输入流中读取字符串需要使用next()方法。这个方法读取输入流中的下一个字符串,一直到空格、Tab或回车符出现。

String s = scan.next();

如果要读取一行输入,需要使用nextLine()方法。

String s = scan.nextLine();

这个方法读取一行输入,直到出现回车符。需要注意的是,Scanner类的nextLine()方法在读取完输入之后会保持换行符,所以如果会影响后续读取。

2. 读取数字

从输入流中读取数字需要使用nextInt()、nextShort()、nextLong()、nextFloat()或者nextDouble()等方法。例如,读取下一个整数:

int n = scan.nextInt();

如果输入不是整数,会抛出InputMismatchException异常。所以我们可以用hasNextInt()方法先判断是否可以读入一个整数:

if (scan.hasNextInt()) {
    int n = scan.nextInt();
} else {
    // 不是整数
}

3. 分割字符串

如果需要从一个字符串中分割出多个子字符串,可以使用Scanner类的useDelimiter()方法。这个方法用来设置输入流中的分隔符。例如,以逗号为分隔符,读取一串数字:

scan.useDelimiter(",");
while (scan.hasNextInt()) {
    int n = scan.nextInt();
}

关闭Scanner

在完成输入操作后,必须关闭Scanner对象,防止资源泄露。可以使用close()方法关闭Scanner。

scan.close();

总结

Java Scanner类是一个常用的读取输入流的工具类,其API提供了许多方法,用于快速地读取数据。尤其需要记住的是,当读取完某个数据时,很可能需要继续从另外一个位置读取。如果不使用方法close(),那么程序将一直持有该输入流,导致其他对象无法使用该输入流而出现错误。因此,必须使用close()方法关闭Scanner对象以释放资源。