您的位置:

Java Scanner类的使用

一、Scanner类概述

Scanner类是Java中的一个工具类,它提供了一种方便的方式来读取用户输入和文件内容。与其他读取器不同,Scanner类将输入数据分割成单个标记,其中每个标记可被解释为不同类型的数据。Scanner类的优点在于它提供了一些内置函数来解析基本数据类型,也允许开发者使用正则表达式从非结构化文本中解析出数据。

二、Scanner类的创建

要使用Scanner类,需要先创建一个Scanner对象。Scanner可以从多种数据源获取输入,包括从标准输入读取、读取文件、读取字符串、读取网络数据等等。以下示例展示如何从标准输入(System.in)读取数据:

import java.util.Scanner;

public class ScannerDemo {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个整数:");
        int num = scanner.nextInt();
        System.out.println("你输入的数字是:" + num);
    }
}

在上面的示例中,我们首先创建了一个Scanner对象,然后通过调用nextInt()方法获取用户输入的整数,并将其保存在变量num中,最后输出用户输入的数字。需要注意的是,Scanner对象在使用完毕后应该关闭,以释放资源。在以上示例中我们没有显式调用Scanner的close()方法,可以通过将Scanner对象放在try-with-resources语句中来自动关闭该对象:

import java.util.Scanner;

public class ScannerDemo {
    public static void main(String[] args) {
        try (Scanner scanner = new Scanner(System.in)) {
            System.out.println("请输入一个整数:");
            int num = scanner.nextInt();
            System.out.println("你输入的数字是:" + num);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

三、Scanner类的读取

Scanner类提供了多个方法来读取输入数据,常用的有nextInt()、nextFloat()、nextDouble()、nextLine()等方法。以下示例演示如何使用nextLine()方法读取一行文本:

import java.util.Scanner;

public class ScannerDemo {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入几句话(以回车键结束输入):");
        String sentence = scanner.nextLine();
        System.out.println("你输入的句子是:" + sentence);
    }
}

在上面的示例中,我们使用Scanner对象的nextLine()方法读取输入的一行文本,并将其保存在字符串变量sentence中,最后输出用户输入的句子。运行该程序,输入几句话,程序会输出你输入的完整句子。需要注意的是,nextLine()方法会将回车符和换行符也一同读入,因此如果用户先输入了空行,调用nextLine()方法时会直接返回一个空字符串。

四、Scanner类的区域设置

Scanner类允许调用Locale类中的常量来设置区域信息,以便正确地解析数据。以下示例演示如何使用Scanner类解析某国货币的货币值:

import java.util.Locale;
import java.util.Scanner;

public class ScannerDemo {
    public static void main(String[] args) {
        Scanner scanner = new Scanner("¥10.5", "¥#0.00", Locale.CHINA);
        double money = scanner.nextDouble();
        System.out.printf("解析的货币值为:%.2f元", money);
    }
}

在以上示例中,我们定义了一个Scanner对象,该对象读取的数据是“¥10.5”,格式字符串为“¥#0.00”,解析区域为中国(Locale.CHINA)。接着我们调用Scanner对象的nextDouble()方法来解析数据,得到的解析结果为10.5。需要注意的是,在中国,货币符号是人民币符号“¥”,在格式字符串中需要添加该符号。

五、Scanner类的异常处理

当输入数据不符合所需的格式时,Scanner类会抛出InputMismatchException异常。因此在使用Scanner类时需要进行异常处理。以下示例演示如何使用try-catch语句处理异常:

import java.util.InputMismatchException;
import java.util.Scanner;

public class ScannerDemo {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个整数:");
        try {
            int num = scanner.nextInt();
            System.out.println("你输入的数字是:" + num);
        } catch (InputMismatchException e) {
            System.out.println("输入的数据格式不正确,请输入一个整数。");
        }
    }
}

在以上示例中,我们使用Scanner对象读取用户输入的数字,如果输入不是整数,程序会抛出InputMismatchException异常。我们在try块中调用nextInt()方法,如果没有抛出异常,则正常输出用户输入的数字。否则,程序会捕获异常并输出提示信息。