Java中的输入输出函数——Scanner()
Java中的输入输出函数Scanner()是用于读取输入流的工具类,可以方便地从控制台、文件或网络中读取数据。它是Java 5中引入的一个新类,主要用于读取用户的输入以及文件中的数据,同时也可以以不同的进制读取数据,如二进制、八进制和十六进制等。
一、Scanner的特点
Scanner类的特点主要有以下几点:
1. 简单易用:Scanner类提供了一些简单易用的方法,可以方便地读取不同类型的数据。
2. 支持多种输入源:Scanner类不仅可以从控制台中读取数据,还可以从文件、字符串和网络中读取数据。
3. 支持不同类型的数据:Scanner类可以读取不同类型的数据,包括整数、浮点数、字符串、布尔值等等。
4. 方便的异常处理:Scanner类提供了异常捕获机制,可以轻松地处理输入输出中的异常。
二、Scanner的使用
Scanner类的使用一般分为以下几个步骤:
1. 创建Scanner对象:创建Scanner对象时必须指定要读取的输入流。
例如,如果要从控制台中读取数据,可以这样创建Scanner对象:
Scanner sc = new Scanner(System.in);
2. 读取数据:使用Scanner对象提供的方法从输入流中读取数据。
例如,可以使用nextInt()方法读取整数,nextDouble()方法读取浮点数,next()方法读取字符串等等。
3. 处理数据:根据读取的数据处理在程序中的逻辑。
例如,可以对读取的整数进行计算、判断等等。
4. 关闭Scanner对象:使用完Scanner对象后需要将其关闭,释放相关资源。
例如,可以使用close()方法关闭Scanner对象,释放资源。
以下是Scanner类常用的一些方法:
1. next():读取输入流中的字符串,以空格作为分隔符。
2. nextLine():读取输入流中的一整行字符串,包括空格。
3. nextInt():读取输入流中的下一个整数。
4. nextDouble():读取输入流中的下一个浮点数。
5. nextBoolean():读取输入流中的下一个布尔值。
6. hasNext():判断输入流中是否还有下一个元素。
7. useDelimiter():设置输入流的分隔符,缺省分隔符为空格。
三、Scanner的异常处理
在读取输入流或文件时,可能会遇到一些异常,如文件不存在、文件格式错误、输入值不符合预期等等。为了避免程序崩溃,我们可以使用异常处理机制来处理这些异常。
Scanner类提供了InputMismatchException、NoSuchElementException、IllegalStateException等异常类,可以使用try-catch语句来捕捉这些异常并进行处理。例如,
Scanner sc = new Scanner(System.in);
try {
int n = sc.nextInt();
System.out.println(n);
} catch (InputMismatchException e) {
System.out.println("您输入的不是一个整数,请重新输入!");
}
以上代码中,如果用户输入的不是一个整数,将会捕捉到InputMismatchException异常,程序会输出提示信息并让用户重新输入,以避免程序出错。
四、Scanner的实例
下面来看一个使用Scanner类的例子,从文件中读取学生信息并计算平均分数。
1. 创建一个包含学生信息的文本文件,文件格式如下:
张三 18 90
李四 19 80
王五 20 95
2. 编写Java程序,读取文件中的数据,计算平均分数:
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
try {
File file = new File("students.txt");
Scanner sc = new Scanner(file);
double sum = 0;
int count = 0;
while (sc.hasNext()) {
String name = sc.next();
int age = sc.nextInt();
int score = sc.nextInt();
double average = (double) score / 3;
sum += average;
count++;
System.out.printf("%s的平均分数为:%.2f
", name, average);
}
System.out.printf("所有学生的平均分数为:%.2f", sum / count);
sc.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
以上代码先使用File类创建一个文件对象,然后使用Scanner类读取文件中的数据,计算每个学生的平均分数,并输出。最后计算所有学生的平均分数并输出。
五、总结
Scanner类是Java中一个非常实用的工具类,可以方便地读取用户的输入以及文件中的数据。它具有简单易用、支持多种输入源、支持不同类型的数据、方便的异常处理等特点,可以使程序开发更加高效快捷。
