博客
关于我
Scanner——使用引用类型的基本步骤
阅读量:713 次
发布时间:2019-03-21

本文共 5067 字,大约阅读时间需要 16 分钟。

Scanner是Java提供的一个功能强大的工具类,用于处理输入流。它不仅可以从标准输入读取数据,还可以处理不同的数据类型,提升了Java程序的输入处理效率。以下是关于Scanner类的详细说明和应用实例。

Scanner类概述

Scanner类也是Java的ITH层次上提供的一个强大工具。它能够简化从标准输入(System.in)读取不同类型数据的过程,与C语言中的scanf函数类似,但功能更为强大和灵活。在编程中,Scanner类常用于批量读取或解析输入数据,适用于多种形式的输入处理需求。

为什么使用Scanner类?

  • 简化输入操作:Scanner类提供了一系列便捷的方法,可以自动解析输入的字符串为数值类型(如int、double等),大大简化了手动转换的繁琐过程。
  • 统一处理多种输入类型:无论是整数、浮点数、字符串还是其他类型,Scanner都提供对应的方法进行处理。
  • 提高可读性和可维护性:使用Scanner类可以减少手动输入处理的代码,提升代码的可读性和可维护性。

Scanner类的基本用法

  • 导包为了使用Scanner类,需在代码中导入相应的包。通常,这可以通过在你的项目的build.gradle中的dependencies中添加使用还是通过在代码中手动导入:
  • import java.util.Scanner;
    1. 创建Scanner对象Scanner类由System.in实例创建,System.in是代表标准输入流。下面是创建Scanner对象和获取输入流的示例代码:
    2. Scanner scanner = new Scanner(System.in);
      1. 读取输入有多种方法可以用来读取输入:
        • read()方法:这个方法覆盖了一个字符的读取。如果要读取多个字符,可以连续调用,但可能更常用的是:

        • readLine()方法:读取一行输入,包括换行符前后的空白字符。默认情况下,返回一个字符串,包括换行符。

        • 对于不同类型的数据,Scanner依次提供以下方法:

          • readInt(): 读取整数值。
          • readDouble(): 读取浮点数值。
          • readLong(): 读取长整数值。
          • readString(): 读取字符串值。
          • 等等。
        1. 关闭资源在读取完输入后,应该及时关闭Scanner实例和输入流,以释放系统资源。这样可以避免潜在的内存泄漏问题。
        2. 完整示例

          以下是一个将输入转换为整数的完整示例:

          import java.util.Scanner;public class ScannerDemo {    public static void main(String[] args) {        Scanner scanner = new Scanner(System.in);        System.out.println("请输入一个整数:");                while (true) {            try {                int num = scanner.nextInt();                System.out.println("你输入的数字是:" + num);                break;            } catch (java.util.InputMismatchException e) {                System.out.println("输入错误,请重新输入整数。");            }        }        scanner.close();    }}

          读取字符串的示例

          以下是一个读取字符串的示例:

          import java.util.Scanner;public class ScannerString {    public static void main(String[] args) {        Scanner scanner = new Scanner(System.in);        System.out.println("请输入一个字符串:");                while (true) {            try {                String str = scanner.nextLine();                System.out.println("你输入的字符串是:" + str);                break;            } catch (java.util.InputMismatchException e) {                System.out.println("输入错误,请重新输入字符串。");            }        }        scanner.close();    }}

          更高级用法

          配置扫描规则

          有时,你可能需要根据需要自定义如何处理输入。例如,读取一个多个数字组成的字符串,而不是单独的数字。可以使用Scanner的scan方法来实现更细小的解析控制:

          import java.util.Scanner;public class CustomScanner {    public static void main(String[] args) {        Scanner scanner = new Scanner(System.in);        System.out.println("请输入数字,例如:123, 456, 789:");                while (true) {            try {                String input = scanner.nextLine();                                // 当然,这只是一个示例,可能需要更多的处理逻辑。                int firstDigit = Integer.parseInt(input.substring(0, 1));                System.out.println("你输入的第一个数字是:" + firstDigit);                                // 假设你想阅读多个数字                break;            } catch (java.util.InputMismatchException e) {                System.out.println("输入错误,请重写清晰的数字字符串。");            }        }        scanner.close();    }}

          综合示例:根据不同输入类型进行处理

          有时候,读取用户输入后需要根据输入内容进行不同的处理。这可以通过封装条件判断实现:

          import java.util.Scanner;public class MultiScanner {    public static void main(String[] args) {        Scanner scanner = new Scanner(System.in);        System.out.println("请输入你的身份:学生、教师还是游客?");                while (true) {            String role = scanner.nextLine().trim();                        switch (role) {                case "学生":                    System.out.println("你希望获得哪个课程呢?");                    String course = scanner.nextLine().trim();                    System.out.println("感谢您选择我们的" + course + "课程!");                    break;                case "教师":                    System.out.println("欢迎加入我们教师团队!");                    break;                case "游客":                    System.out.println("有什么可以帮助您的吗?");                    break;                default:                    System.out.println("请确认您是学生、教师还是游客。");            }        }        scanner.close();    }}

          扩展学习

          • 批量读取输入:在某些情况下,读取所有输入更为方便,可以利用scanner-use-delimiter方法:
          import java.util.Scanner;public class BatchScan {    public static void main(String[] args) {        System.out.println("请输入多行输入,按回车结束:");                List
          inputs = new ArrayList<>(); scanner.useDelimiter("\n"); while (scanner.hasNext()) { inputs.add(scanner.nextLine()); } scanner.close(); System.out.println("你输入的所有内容: " + String.join("\n", inputs)); }}
          • 自定义编码:根据需要,可以调整Scanner的编码方式,避免字符集编码问题:
          import java.util.Scanner;public class EncodingDemo {    public static void main(String[] args) {        Scanner scanner = new Scanner(System.in, StandardCharsets.CHARSET_ISO_8859_15);        System.out.println("输入的字符编码是什么?");                while (true) {            try {                String input = scanner.nextLine();                System.out.println("你输入的是:" + input);                break;            } catch (java.util.InputMismatchException e) {                System.out.println("输入错误,请重新输入;            }        }        scanner.close();    }}

          结论

          通过以上实例,我们可以看到,Scanner类在Java编程中的强大功能和灵活性。它不仅可以读取文本数据,还可以读取多种数据类型,适用于不同的输入需求。尤其是在需要处理多种情况或批量读取输入的场合,Scanner类是一个非常有价值的工具。

    转载地址:http://elwgz.baihongyu.com/

    你可能感兴趣的文章
    web访问ejb测试 详解
    查看>>
    window系统下安装使用curl命令工具
    查看>>
    假如计算机是中国人发明的,那代码应该这么写
    查看>>
    神器 Codelf !
    查看>>
    趣图:会算法和不会算法的区别
    查看>>
    区块链会2020再次爆发,先学点DAPP压压惊,跟我一起学《区块链DApp入门实战》
    查看>>
    问题解决28:微信网页授权出现redicet_uri 参数错误
    查看>>
    LeakCanary 中文使用说明
    查看>>
    反转链表,(5)
    查看>>
    Camera (api1)的打开过程
    查看>>
    wxwidgets绘图
    查看>>
    wxwidgets事件处理
    查看>>
    用OpenCv转换原始图像数据到wximage
    查看>>
    codeblocks下wxWidgets编译与配置
    查看>>
    OpenCv+wxwidgets尝试
    查看>>
    wxwidgets自定义事件+调试
    查看>>
    wxwidgets编写多线程程序--wxThread
    查看>>
    BUUCTF:[湖南省赛2019]Findme
    查看>>
    p144循环网络
    查看>>
    三维点云处理
    查看>>