使用Scanner类完成数据输入 | 带你学《Java语言高级特性》之六十八

简介: Scanner类是JDK1.5以后出现的用于解决输入流处理问题的程序类,在整体设计上优于之前版本的BufferedReader类,本节将详细介绍Scanner类的相关内容。

上一篇:使用缓冲输入流优化数据输入能力 | 带你学《Java语言高级特性》之六十七
Scanner类是JDK1.5以后出现的用于解决输入流处理问题的程序类,在整体设计上优于之前版本的BufferedReader类,本节将详细介绍Scanner类的相关内容。

【本节目标】
通过阅读本节内容,你将了解到Scanner类内提供的相关方法及其功能,学会使用Scanner类输入字符串、数字、生日等信息以及使用Scanner类读取文件信息,对程序IO拥有一个较为全面的认识。

Scanner类

java.util.Scanner是从JDK1.5之后追加的一个程序类,其主要的目的解决输入流的访问问题的,可以理解为BufferedReader的替代功能类,在Scanner类里面有如下几种操作方法:

  • 构造:public Scanner(InputStream source);
  • 判断是否有数据:public boolean hasNext();
  • 取出数据:public String next();
  • 设置分隔符:public Scanner useDelimiter(String pattern);

范例:使用Scanner实现键盘数据输入

import java.util.Scanner;
public class JavaAPIDemo {
    public static void main(String[] args) throws Exception {
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入年龄:");
        if (scan.hasNextInt()) {    //判断是否有整数输入
            int age = scan.nextInt() ;   //直接获取数字
            System.out.println("您的年龄:" + age);
        } else {
            System.out.println("咋看不懂呢?输入的是年龄。");
        }
        scan.close();
    }
}

此时可以明显的感受到Scanner的处理会更加的简单。

范例:输入一个字符串

import java.util.Scanner;
public class JavaAPIDemo {
    public static void main(String[] args) throws Exception {
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入信息:");
        if (scan.hasNext()) {
            String msg = scan.next();
            System.out.println("输入信息为:" + msg);
        }
        scan.close();
    }
}

使用Scanner输入数据还有一个最大的的特点是可以直接利用正则进行验证判断。

范例:输入一个人的生日(yyyy-MM-dd)

import java.util.Scanner;
public class JavaAPIDemo {
    public static void main(String[] args) throws Exception {
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入您的生日:");
        if (scan.hasNext("\\d{4}-\\d{2}-\\d{2}")) {
            String str = scan.next("\\d{4}-\\d{2}-\\d{2}");
            System.out.println("输入信息为:" + new SimpleDateFormat("yyyy-MM-dd").parse(str));//换行不算输入
        } 
        scan.close();
    }
}

现在可以发现Scanner的整体设计要好于BufferedReader,而且要比直接使用InputStream类读取要方便。例如,现在如果要读取一个文本文件中的所有内容信息,如果采用的是InputStream类,那么就必须依靠内存输出流,进行临时数据的保存,之后还需要判断读取的内容是否是换行。

范例:使用Scanner读取

import java.io.File;
import java.util.Scanner;
public class JavaAPIDemo {
    public static void main(String[] args) throws Exception {
        Scanner scan = new Scanner(new File("D:" + File.separator + "mldn-info.txt"));
        scan.useDelimiter("\n");//设置读取分隔符
        while (scan.hasNext()) {
            System.out.println(scan.next());
        }
        scan.close();
    }
}

在以后的开发过程之中,如果程序需要输出数据一定使用打印流,输入数据使用Scanner(BufferedReader)。

想学习更多的Java的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学

下一篇:使用Serializable实现类对象序列化能力 | 带你学《Java语言高级特性》之六十九
更多Java面向对象编程文章查看此处

相关文章
|
19小时前
|
安全 Java 开发者
Java一分钟之-文件与目录操作:Path与Files类
【5月更文挑战第13天】Java 7 引入`java.nio.file`包,`Path`和`Files`类提供文件和目录操作。`Path`表示路径,不可变。`Files`包含静态方法,支持创建、删除、读写文件和目录。常见问题包括:忽略异常处理、路径解析错误和权限问题。在使用时,注意异常处理、正确格式化路径和考虑权限,以保证代码稳定和安全。结合具体需求,这些方法将使文件操作更高效。
8 2
|
19小时前
|
安全 Java 开发者
Java一分钟之-Optional类:优雅处理null值
【5月更文挑战第13天】Java 8的`Optional`类旨在减少`NullPointerException`,提供优雅的空值处理。本文介绍`Optional`的基本用法、创建、常见操作,以及如何避免错误,如直接调用`get()`、误用`if (optional != null)`检查和过度使用`Optional`。正确使用`Optional`能提高代码可读性和健壮性,建议结合实际场景灵活应用。
15 3
|
23小时前
|
存储 Java ice
【Java开发指南 | 第十六篇】Java数组及Arrays类
【Java开发指南 | 第十六篇】Java数组及Arrays类
8 3
|
1天前
|
Java 编译器 ice
【Java开发指南 | 第十五篇】Java Character 类、String 类
【Java开发指南 | 第十五篇】Java Character 类、String 类
10 1
|
1天前
|
存储 Java ice
【Java开发指南 | 第十四篇】Java Number类及Math类
【Java开发指南 | 第十四篇】Java Number类及Math类
9 1
|
5月前
|
Java
多线程与并发,Java中介绍一下Thread类和Runnable接口的区别。
多线程与并发,Java中介绍一下Thread类和Runnable接口的区别。
33 1
|
5月前
|
Java Unix 程序员
java 8 新特性讲解Optional类--Fork/Join 框架--新时间日期API--以及接口的新特性和注解
java 8 新特性讲解Optional类--Fork/Join 框架--新时间日期API--以及接口的新特性和注解
63 1
|
2天前
|
安全 Java 调度
Java一分钟:多线程编程初步:Thread类与Runnable接口
【5月更文挑战第11天】本文介绍了Java中创建线程的两种方式:继承Thread类和实现Runnable接口,并讨论了多线程编程中的常见问题,如资源浪费、线程安全、死锁和优先级问题,提出了解决策略。示例展示了线程通信的生产者-消费者模型,强调理解和掌握线程操作对编写高效并发程序的重要性。
42 3
|
20天前
|
Java
一文搞清楚Java中的包、类、接口
包、类、接口、方法、变量、参数、代码块,这些都是构成Java程序的核心部分,即便最简单的一段代码里都至少要包含里面的三四个内容,这两天花点时间梳理了一下,理解又深刻了几分。
33 10
|
1月前
|
Java
Java中的多线程实现:使用Thread类与Runnable接口
【4月更文挑战第8天】本文将详细介绍Java中实现多线程的两种方法:使用Thread类和实现Runnable接口。我们将通过实例代码展示如何创建和管理线程,以及如何处理线程同步问题。最后,我们将比较这两种方法的优缺点,以帮助读者在实际开发中选择合适的多线程实现方式。
24 4