• Scanner扫描器类的next方法解析


    在字符界面版案例中经常会使用Scanner类接收用户输入的各种类型的数据

    Scanner 的简单使用

    Scanner和String都是JDK提供的工具类,都是引用类型

    Scanner是一个扫描器,我们录取到键盘的数据,先存到缓存区等待读取,它判断读取结束的标示是 空白符;比如空格,回车,tab 等等。

    System.in 系统录入 和 System.out 相反

    内置方法

    1. next()
    2. nextInt()
    3. nextLine()

    使用步骤:

    第一步:导入
        import java.util.Scanner;
    第二步:创建一个Scanner对象,用于接收系统的录入
        Scanner scanner = new Scanner(System.in);
    第三步:定义对象进行输入
        int age = scanner.nextInt();
    第四步:关闭输入
        scanner.close();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    比如:

    姓名 String 类型
    年龄 int 类型

    next()

    扫描到一个空白符号就终止(空格,回车,tab 等),但是如果只扫描到一个空白符不会终止,而会一直阻塞等待,直到有值。并将这个空白符连同后面的所有符号一起交给下一次扫描(缓存),

    nextInt():

    与next()类似,只能输入int类型(异常类型会报InputMismatchException)
    其他基本数据类型雷同

    注意此处:
    两者都会空白符做分割符,并将这个空白符连同后面的所有符号一起交给下一次扫描

    nextLine()

    只有扫描到回车符 “\r”才终止。不会将空白符交给下一次扫描

    hasNext()

    其实按照原理hasNext()因该写作nextHas(),就容易理解了(坑爹的英文)。它也是种输入,该方法分为有无形参两种情况。无形参( hasNext() )就会不停的输入,有形参( hasNext(“#”) )就会判断下一个next()中是否等于形参。等于就返回真,等待下一次输入。否则就返回假,输入结束。

    参考案例5

    回车下坠效果

    1、正常情况下,先接收的字符串类型,后接收原始数据类型
    没任何影响 next方法 同理。

    // 先接收字符串 后接收数字
    public static void show() {
    	Scanner sc = new Scanner(System.in );
    	System.out.println("请输入您的用户名:");
    	String name = sc.nextLine();
    	System.out.println("请输入您的年龄:");
    	int age = sc.nextInt();
    	System.out.println( name + "--" + age);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

    2、两者都会空白符做分割符,并将这个空白符连同后面的所有符号一起交给下一次扫描

    // 两者都会空白符做分割符,并将这个空白符连同后面的所有符号一起交给下一次扫描
    public static void show2() {
    	Scanner sc = new Scanner(System.in );
    	System.out.println("请输入您的用户名:");
    	String name = sc.nextLine();
    	System.out.println("请输入您的年龄:");
    	int age = sc.nextInt();
    	System.out.println("请输入您的金币:");
    	int money = sc.nextInt();
    	System.out.println( name + "--" + age + "--" +  money);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述
    此时会发现金币处使用的数据是 年龄空格后的 缓存数据19 并不是我们输入的,程序就结束了。

    3、异常情况下,先接 原始数据类型, 后接收收字符串

    // 先接收数字  后接收字符串
    public static void show3() {
    	Scanner sc = new Scanner(System.in );
    	System.out.println("请输入您的年龄:");
    	int age = sc.nextInt();
    	System.out.println("请输入您的用户名:");
    	String name = sc.nextLine();
    	System.out.println( name + "--" + age);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

    此时就会触发回车下坠效果 ,导致下一个字符串无法被接收。

    原因:实际上nextLine()真正接收的是上面的一个回车

    4、nextInt() 或 next() 之后 需要额外执行一个sc.nextLine 接收上面的回车 然后正常用nextLine来接收字符串

    public static void show4() {
    		Scanner sc = new Scanner(System.in );
    		System.out.println("请输入您的年龄:");
    		int age = sc.nextInt();
    		// 额外执行一个sc.nextLine 接收上面的回车
    		sc.nextLine();
    		System.out.println("请输入您的用户名:");
    		String name = sc.nextLine();
    		System.out.println( name + "--" + age);
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述

    5、以#作为结束符的循环输入

    // 指定符号循环接收  以#作为结束符的循环输入
    public static void show5() {
    	Scanner sc = new Scanner(System.in );
    	System.out.println("请输入带#的字符串");
        while( !sc.hasNext("#")){
            System.out.println(sc.next());
        }
        System.out.println("程序结束");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述


    【Java学习笔记】Scanner类中next系列方法的总结

  • 相关阅读:
    BEV(Bird’s-eye-view)三部曲之一:综述
    大数据面试题(五):Hadoop优化核心高频面试题
    C++:超越C语言的独特魅力
    centos中sudo: apt: command not found
    python调用seafile接口上传文件到seafile
    JS获取音频的总时长,解决audio.duration 为 NaN || Infinity 问题
    【重识云原生】第四章容器基础6.4.5.2节——Deployment配置详细说明
    mac 环境搭建jmeter
    SSM萌宠宠物网店毕业设计源码011042
    视频号视频怎么下载:完全教程和实用技巧
  • 原文地址:https://blog.csdn.net/Klhz555/article/details/127599520