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对象以释放资源。