作者: | 来源:互联网 | 2023-12-09 17:19
本文解释了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()方法不会移动指针。