,,Java Scanner对象中hasNext()与next()方法的使用

,,Java Scanner对象中hasNext()与next()方法的使用

本文主要介绍了Java Scanner对象中hasNext()和Next()方法的使用,有很好的参考价值。希望对你有帮助。如有错误或不足之处,请不吝赐教。

目录

扫描仪对象输入hasNext()和hasNextLine()方法中hasNext()和Next()方法的区别

Scanner对象中hasNext()与next()方法

相信很多人和我一样,刚接触Java的时候都遇到过这样的问题:

我们可能想要的是:首先输出“请输入:”然后我们可以在控制台中输入一个字符串或数字。

然而事实是:控制台要求我们先输入,然后显示“请输入:”字样。

这是怎么回事?

原因:

首先,sc.hasNext()和sc.next()都可以用来输入

我们可以发现hasNext()返回一个布尔类型,Next()返回你输入的值。

Sc.hasNext()可以理解为保存我们输入到Sc中的值,而sc.next()可以理解为从sc中取值,取值后将标识符移回来(可以理解为:取值后这个值就没了)。如果SC中没有值,它也会要求输入值(如前所述,两者都可以输入)。

那么我们来分析一下节目的开头:

第一,当我们进入while循环时,sc.hasNext()要求我们为他输入一个值,所以我们不会输出“请输入:”。当我们完成时,String str=sc.next()将从sc中获取我们输入的值,并将其返回给str。如果没有值,就会被屏蔽,要求我们给它一个值。

输入hasNext()和hasNextLine()方法的区别

最近,我正在学习在Niuke.com上做一些算法练习。

发现在某些情况下,编写的Java代码在本地运行是正常的,

但它就是不能通过Niuke.com的考验。

经过检查,最终定位在读取测试用例的位置,发现:

Scanner scanner=新扫描仪(system . in);

//当使用hasNextLine方法确定是否有数据剩余时

//将会报告一个错误

while(scanner.hasNextLine()){

//TODO:实现代码

}

//当hasNextLine修改为hasNext()方法时

//程序恢复正常

while(scanner.hasNext()){

//TODO:实现代码

}

通过在网上搜索,获取到这两种方法的区别:

检查输入流时:

hasNext()方法将确定接下来是否有非空字符。如果有,它将返回true,否则将返回false

hastline()方法将根据行匹配模式确定是否有下一行(包括空行)。如果有,则返回true否则,它将返回false。

例如,我们目前有以下测试用例:

7 15 9 5

这个测试用例作为一个文件存储在Niuke.com上。

但是在linux系统中,文件末尾会有一个换行符\n,这意味着实际从System.in的输入流中读取的数据流如下:

7 15 9 5\n

程序处理完5后,输入流中只剩下一个换行符。处理完5,while进行循环判断,hasNext()方法和hasNextLine()方法得到的结果是不一样的。

hasNext()方法将假设其后没有非空字符,并将返回false。

hasNextLine()方法会认为换行符\n是空行,如果匹配该行的匹配模式,则返回true值。但实际上因为没有更多的数据,读取输入流时会发生异常,导致整个运行出错。

建议方案

如果采用hasNextXxxx(),后面也要用到NextXxxx():

比如前面用hasNextLine(),那么后面用NextLine()处理输入;

如果后面用了nextInt()方法,那么应该早一点用hasNext()方法判断。

以上个人经历,希望能给大家一个参考,也希望大家多多支持我们。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: