Scanner的hasNext()方法

Scanner的hasNext()方法一、实例代码importjava.util.*;publicclassScannerKeyBoardTest{publicstaticvoidmain(String[]args){System.out.println("请输入若干单词,以空格作为分隔");Scannersc=newScanner(System…

大家好,又见面了,我是你们的朋友全栈君。

一、实例代码

import java.util.*;
public class ScannerKeyBoardTest
{
	public static void main(String[] args)
	{
		System.out.println("请输入若干单词,以空格作为分隔");
		Scanner sc = new Scanner(System.in);
		while(sc.hasNext())
		{
			System.out.println("键盘输入的内容是:"

				+ sc.next());
		}
		System.out.println("执行吗");
	}
}

最后的“执行吗”会被执行到吗?来,看实验结果
这里写图片描述
文字模糊,手动说明(这里的输入光标在闪动,期待你的再次输入!)

二、执行过程

为什么会这样,和我们理解的不一样呀?我们理解的运行过程是
这里写图片描述
hasNext()在缓冲区中依次扫描单词,分别返回true,然后再执行打印输出。扫描到空时返回false,退出while循环,最后执行“执行吗”语句。一般人都会这么想,然而不能想当然。下面我们去查一下API
这里写图片描述
方法解释:如果此扫描器的输入(缓冲区)中有另一个token(输入的字符串),则返回true。what? 根本没有提到什么时候返回false。其实执行过程是这样的(重点:),当执行到hasNext()时,它会先扫描缓冲区中是否有字符,有则返回true,继续扫描。直到扫描为空,这时并不返回false,而是将方法阻塞,等待你输入内容然后继续扫描。这样的话,它岂不是吃了**口香糖根本停不下来。

三、解决方法

使用带有参数的重载方法,当扫描到的字符与参数值匹配时返回true
这里写图片描述
修改后代码

import java.util.*;
public class ScannerKeyBoardTest
{
    public static void main(String[] args)
    {
        System.out.println("请输入若干单词,以空格作为分隔");
        Scanner sc = new Scanner(System.in);
        while(!sc.hasNext("#"))  //匹配#返回true,然后取非运算。即以#为结束符号
        {
            System.out.println("键盘输入的内容是:"

                + sc.next());
        }
        System.out.println("会执行的");
    }
}

运行结果:
这里写图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/162034.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • docker 修改容器时间_jenkins docker持续集成

    docker 修改容器时间_jenkins docker持续集成前言用docker搭建的Jenkins环境时间显示和我们本地时间相差8个小时,需修改容器内部的系统时间查看时间查看系统时间date-R进入docker容器内部,查看容器时间dockere

    2022年7月31日
    4
  • 人生的思考——温水中被煮熟的程序员

    很多时候我们不去行动,并不是我们不想去行动,而是我们不知道该从什么地方开始!怕什么真理无穷,进一步有一步的欢喜怕什么路途遥远。走一步有一步的风景

    2022年2月25日
    52
  • vuecli3配置webpack_vue不混淆如何配置

    vuecli3配置webpack_vue不混淆如何配置前言如果我们想在webpack中使用vue,就需要在webpack中配置vue配置vue首先,我们需要在项目中安装vue,安装命令如下:npminstallvue–save安装完成后

    2022年7月29日
    9
  • iOS 开发之实现 App 消息推送(最新)[通俗易懂]

    iOS 开发之实现 App 消息推送(最新)[通俗易懂]今天就由本菜鸟给大家做一个简单的IOSApp消息推送教程吧!一切从0开始,包括XCode6,IOS8,以及苹果开发者中心最新如何注册应用,申请证书以及下载配置概要文件,相信很多刚开始接触ios的人会很想了解一下。(ps:网上看了一下虽然有很多讲述推送的好教程,我也是看着一步步学会的,但是这些教程的时间都是去年或者更早时期的,对引导新手来说不是很合适)

    2022年5月5日
    30
  • 《光棍节程序员闯关秀》闯关攻略

    《光棍节程序员闯关秀》闯关攻略https://1111.segmentfault.com《光棍节程序员闯关秀》     程序员们,欢迎来攻!!!在之前的基础上,重新整理了一遍,之前才闯到第8关,然而,昨天整理文章的时候,网站服务器崩了,所以,可遗憾了,还好今天,正常了,把第8关过了,呵呵,第九关,真的不想过了,就这样吧,至于SegmentFault的账号早就有了,还是蛮喜欢这个网站的。我发现所有的key可以都在变

    2022年7月17日
    20
  • Apache Struts2打开重定向/命令执行 CVE-2013-2251「建议收藏」

    Apache Struts2打开重定向/命令执行 CVE-2013-2251「建议收藏」昨日,著名JavaWeb框架Struts官方再发高危安全漏洞补丁升级(最新版本为:2.3.15.1),升级修补了多个安全漏洞,其中包括一个远程任意代码的高危安全漏洞,这些漏洞可以影响到Struts2.0.0-Struts2.3.15的所有版本。攻击者可以利用该漏洞,执行恶意Java代码,最终导致网站数据被窃取、网页被篡改等严重后果。基于Struts2使用广泛,目前很多网站还没有升级,另外

    2022年7月13日
    14

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号