Scanner注意事项与报错(next()、nextInt()、nextline()等)

首先介绍一个经典的问题:nextline和nextInt混用出现的问题,当前面有nextInt时,nextLine不会等待你输入字符串。如下:

如图,控制台还没有等我输入字符串就直接输出了num

因为你输入10的时候实际是按了回车,因此输入的实际上是10加上回车换行符,10被nextInt读取了,但是回车换行符被保留下来了。而nextLine的结束符就是回车换行符(本来正常操作应该是输入字符串的时候敲下字符串然后敲换行,nextLine看见换行符就截止工作了,输出了换行符前面的字符串),此时nextLine看到内存之中有一个换行符就结束工作了,因此不会进行接下来的任何操作。

nextInt方法根据分隔符(回车,空格等)只取出输入的流中分割的第一部分并解析成Int,然后把后面的字节传递下去。
所以,第二种情况键盘实际输入是“10+回车”,nextInt读出了“10”,并留下了“回车”,
接着netxLine读到了一个“回车”,这是字符串的结束判定符,因此直接结束。

nextInt和nextLine混用(整数和字符串混合输入的解决方法):用next和nextInt

  

那为啥替换成next就不会报错呢?因为next的结束符是空格和tab键,如下。前面输入整数的时候即使还留了换行符,但是next看到不会结束工作,因此可以发挥作用。

那又会有疑问,那next记录不完整啊,不可以记录含空格的完整数据 ,那咋办呢。网课老师说不需要解决,因为以后采集数据不会通过控制台键盘录入采集,而是通过网页。其实我也不是完全相信,鉴于目前还是小白,就不过分深究了。我稍微试了下。

而且不仅是不完整,当next输入有空格的时候还有出现一些问题。

1.当我输入的字符串有空格,此时报错,此时我debug发现大概就是nextInt接收到了j这个字符,因为前面next遇到它的结束符空格就录入结束了,剩下的j被nextInt遇到,因为不符合录入类型,故报错。那我把j替换成2还报错吗?试一下

 

2. 此时它不会等待我输入整数就直接结束了,但是!nextInt录入了2。因为换行符是nextInt的一个分隔符,他只会读取分隔符前面的有效字符。读取完成之后就结束了。所有有了上面的结果。

next():
1、一定要读取到有效字符后才可以结束输入。
2、对输入有效字符之前遇到的空白,next() 方法会自动将其去掉。
3、只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
next() 不能得到带有空格的字符串。
.nextInt():
这个方法跟next()一直,只是规定了数据类型是Int。

.nextLine():
1、以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符。
2、可以获得空白。
————————————————
版权声明:本文为CSDN博主「万小猿」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_40262372/article/details/119707423

因为此阶段是快速学习阶段,等掌握了基础之后,有时间再深究再补充,琢磨一下API啥的。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
nextLine() 方法用于读取输入的一行文本,包括空格和特殊字符。该方法返回一个字符串,以换行符(\n)结尾。 例如,以下代码将读取用户输入的一行文本: ``` import java.util.Scanner; public class Test { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.print("请输入一行文本:"); String str = sc.nextLine(); System.out.println("您输入的是:" + str); } } ``` 如果用户输入了文本 "Hello World",则输出结果如下: ``` 请输入一行文本:Hello World 您输入的是:Hello World ``` next() 方法用于读取输入的下一个字符串,直到遇到空格或特殊字符为止。该方法返回一个字符串,不包括空格和特殊字符。 例如,以下代码将读取用户输入的一个字符串: ``` import java.util.Scanner; public class Test { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.print("请输入一个字符串:"); String str = sc.next(); System.out.println("您输入的是:" + str); } } ``` 如果用户输入了字符串 "Hello World",则输出结果如下: ``` 请输入一个字符串:Hello World 您输入的是:Hello ``` nextLine() 方法和 next() 方法的区别在于,nextLine() 方法会读取包括空格和特殊字符在内的整行文本,而 next() 方法只会读取下一个字符串,直到遇到空格或特殊字符为止。因此,如果想读取包含空格的字符串,应该使用 nextLine() 方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值