本文主要介绍了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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。