Java中Scanner类的全面介绍与实践练习

引言

在Java编程中,Scanner类是处理输入的常用工具,它属于java.util包。Scanner类可以解析原始类型和字符串的简单文本扫描器,支持从键盘、文件、网络等多种输入源读取数据。本文将详细介绍Scanner类的使用情况、构造方法,并提供一系列实践练习题。

Scanner类的构造方法

Scanner类提供了多种构造方法,以下是一些常用的构造方法及其使用情况:

1. Scanner(System.in)

这是最常用的构造方法,用于从标准输入流(键盘)创建Scanner对象。

Scanner scanner = new Scanner(System.in);

2. Scanner(File source)

从文件创建Scanner对象。

Scanner scanner = new Scanner(new File("input.txt"));

3. Scanner(InputStream source)

从输入流创建Scanner对象。

Scanner scanner = new Scanner(new FileInputStream("input.txt"));

4. Scanner(Reader source)

从字符流创建Scanner对象。

Scanner scanner = new Scanner(new FileReader("input.txt"));

5. Scanner(File source, String charsetName)

从文件创建Scanner对象,并指定字符集。

Scanner scanner = new Scanner(new File("input.txt"), "UTF-8");

6. Scanner(InputStream source, String charsetName)

从输入流创建Scanner对象,并指定字符集。

Scanner scanner = new Scanner(new FileInputStream("input.txt"), "UTF-8");

7. Scanner(Reader source, String charsetName)

从字符流创建Scanner对象,并指定字符集。

Scanner scanner = new Scanner(new FileReader("input.txt"), "UTF-8");

8. Scanner(InputStream source, String charsetName, boolean close)

从Java 9开始,可以在创建Scanner对象时指定是否在Scanner关闭时关闭输入流。

Scanner scanner = new Scanner(new FileInputStream("input.txt"), "UTF-8", true);

Scanner类的主要方法

Scanner类提供了多种方法来读取不同类型的数据:

  • next():读取下一个完整的token。
  • nextLine():读取一行文本。
  • nextInt():读取下一个整数。
  • nextDouble():读取下一个双精度浮点数。
  • findInLine(Pattern pattern):返回与给定正则表达式匹配的输入的第一个匹配项。
  • hasNext():检查是否还有下一个token。

关闭Scanner

使用完Scanner对象后,应该关闭它来释放资源:

scanner.close();

练习题

练习1:基本输入

编写一个程序,使用Scanner从键盘读取一个字符串和一个整数,并输出它们的和。

import java.util.Scanner;

public class BasicInput {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入一个字符串:");
        String str = scanner.nextLine();
        System.out.print("请输入一个整数:");
        int num = scanner.nextInt();
        System.out.println("字符串长度:" + str.length() + ",整数:" + num);
        scanner.close();
    }
}

练习2:文件读取

编写一个程序,使用Scanner从文件中读取所有行,并输出到控制台。

import java.io.File;
import java.util.Scanner;

public class FileRead {
    public static void main(String[] args) {
        File file = new File("input.txt");
        Scanner scanner = new Scanner(file);
        while (scanner.hasNextLine()) {
            System.out.println(scanner.nextLine());
        }
        scanner.close();
    }
}

练习3:模式匹配

编写一个程序,使用Scanner从键盘读取输入,并找出所有数字。

import java.util.Scanner;
import java.util.regex.Pattern;

public class PatternMatch {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入文本:");
        String input = scanner.nextLine();
        Pattern pattern = Pattern.compile("\\d+");
        for (String number : pattern.split(input)) {
            if (pattern.matcher(number).matches()) {
                System.out.println(number);
            }
        }
        scanner.close();
    }
}

练习4:温度转换

编写一个程序,使用Scanner从键盘读取摄氏温度,然后将其转换为华氏温度并输出。

import java.util.Scanner;

public class TemperatureConversion {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入摄氏温度:");
        double celsius = scanner.nextDouble();
        double fahrenheit = (celsius * 9 / 5) + 32;
        System.out.println(celsius + "°C 等于 " + fahrenheit + "°F");
        scanner.close();
    }
}

练习5:异常处理

编写一个程序,使用Scanner从键盘读取输入,并处理可能的输入错误。

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

public class ExceptionHandling {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入一个整数:");
        try {
            int num = scanner.nextInt();
            System.out.println("输入的整数是:" + num);
        } catch (InputMismatchException e) {
            System.out.println("输入错误,请输入一个整数!");
        }
        scanner.close();
    }
}

练习6:循环输入,满足一定条件时结束程序

使用Scanner类在一个循环中不断读取用户输入的数据,并检查是否满足特定的终止条件。如果满足条件,则终止循环;如果不满足,则继续读取下一条数据。

import java.util.Scanner;

public class DataEntry {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入数据,输入'exit'时终止录入:");

        while (true) {
            System.out.print("请输入:");
            String input = scanner.nextLine();

            // 检查是否满足终止条件,这里以输入"exit"为终止条件
            if ("exit".equals(input)) {
                System.out.println("终止录入。");
                break; // 终止循环
            }

            // 在这里处理输入的数据
            System.out.println("您输入的数据是:" + input);
        }

        scanner.close();
    }
}

结语

通过上述内容,我们详细介绍了Scanner类的构造方法、主要方法以及如何使用这些方法来读取不同类型的数据。通过提供的练习题,读者可以进一步加深对Scanner类的理解。Scanner类是Java中处理输入的重要工具,掌握它对于Java编程是非常重要的。希望这篇文章能够帮助你更好地理解和使用Scanner类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿小young

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值