欢迎访问宙启技术站
智能推送

Java中的输入输出函数——Scanner()

发布时间:2023-06-19 13:45:47

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中一个非常实用的工具类,可以方便地读取用户的输入以及文件中的数据。它具有简单易用、支持多种输入源、支持不同类型的数据、方便的异常处理等特点,可以使程序开发更加高效快捷。