热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Scanner类的next()方法与hasnext()方法的用法解释

本文解释了Scanner类的next()方法和hasnext()方法的用法。next()方法在迭代器指针为空时阻塞等待用户输入,返回用户输入的第一个字符串;在迭代器指针不为空时立即返回当前指针指向的字符串。hasnext()方法的示例代码也给出了解释。

next()方法:


示例代码

public static void main(String[] args) {Scanner sc=new Scanner(System.in);System.out.println(sc.next());System.out.println(sc.next());}

如果当前scanner对象的迭代器iterator指针的指向为空则阻塞此方法等待用户输入,用户输入完则返回用户输入的第一个字符串(以空格为分隔符),然后将指针指向下一个字符串。(scanner对象使用char[]数组保存用户输入的字符串,以空格作为分隔符)。
在这里插入图片描述

如果scanner对象的迭代器iterator指针的指向不为空则立即返回当前指针指向的字符串,然后将指针下移,不会等待用户输入。


运行结果

第一个next()方法输入“Java C操”后按回车,第一个next()方法返回第一个字符串Java,第二个next()方法由于指针指向不为空所以不会等待用户输入,而是直接返回指向的字符串C操。
在这里插入图片描述


hasnext()方法:


示例代码

public static void main(String[] args) {Scanner sc=new Scanner(System.in);int i=1;while(sc.hasNext()){System.out.println("第"+i+"个字符串"+sc.next());i++;}System.out.println("输入完成");}

如果当前scanner对象的迭代器iterator指针的指向为空则阻塞此方法等待用户输入,用户输入完后返回true,指针不会下移。
如果当前scanner对象的迭代器iterator指针的指向已存在字符串则立即返回true,不会等待用户输入。
hasnext()方法永远不会返回false,因为如果scanner对象指针指向的字符串为空时会阻塞此方法让用户继续输入。


运行结果

next()方法指针不断下移读取完后光标仍在闪烁,等待用户再次输入,无法跳出循环运行 System.out.println(“输入完成”)。
在这里插入图片描述如果想要通过hasnext()方法结束输入则需用到hasnext方法的一个重载方法。
在这里插入图片描述


修改后的代码

用“#”号当结束条件

public static void main(String[] args) {Scanner sc=new Scanner(System.in);int i=1;while(!sc.hasNext("#")){System.out.println("第"+i+"个字符串:"+sc.next());i++;}System.out.println("输入完成");}

运行结果

在这里插入图片描述


next()方法与hasnext()方法的相同与不同之处:


相同:

如果当前scanner对象的迭代器iterator指针的指向为空时都会阻塞此方法并等待用户输入。


不同:

返回值不同:
next()返回的是当前指针指向的字符串,hasnext()返回的是true(不会返回false,如果指针指向为空则阻塞等待用户输入)。
指针移动不同:
next()方法每调用一次都会将指针指向到下一个字符串(以空格为分隔符),hasnext()方法不会移动指针。


推荐阅读
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有