Scanner中的nextLine()不执行
程序员文章站
2024-01-01 19:17:52
java.util.Scanner.nextLine()没有效果,不允许的原因 ......
状况
当需要多次输入时,代码中的nextline()直接没有执行就运行下面内容了。
1 scanner sc = new scanner(system.in); 2 3 system.out.println("请选择对方的角色:1.诸葛亮 2.孙瑜 3.赵云"); 4 int computerchoice = sc.nextint(); 5 system.out.println("computerchoice:" + computerchoice ); 6 7 system.out.println("请输入你的名称:"); 8 string playername = sc.nextline(); 9 system.out.println("playername:" + playername );
第一个输入nextint()是正常的,但是第二个输入nextline()直接没让我输入,就开始进行输出,并且没有内容。
原因
不论是next()还是nextint()或是其他一些输入,都是以分隔符结束,例如空格、换行。这也导致没有办法获取有空格的一行内容,才会使用到nextline()方法。
delimiter分隔符
nextline()方法是以换行符(回车)进行分割,可以获取一行内包括空白字符的所有内容。
相比之下,next()他们只获取了其中需要的内容部分,例如:输入“诸葛亮”之后进行回车换行,next()就能获取到取其中的字符“诸葛亮”,但是用于结束输入的“换行”,则因没有被读取而留下来,被后一个输入nextline()读取到。nextline()在给我们输入机会之前就读取到了上次输入剩下的“换行”,判断输入完毕,继续执行下面其他内容。
解决办法
-
如果不是必要获取一整行,可以直接使用next()。
-
如果确实需要,可以执行两次nextline(),让第一个把上次剩余的换行读取掉,第二个来执行需要的内容。(该方法应确保前面确实有nextline以外的输入【目前只测试了常用的几个输入方式】,留有换行符,不然会出现连续输入两次的情况。)
-
也可以创建一个新的scanner sc2 = new scnaner(system.in);,这样nextline()就又是第一个输入了。虽然个人认为不是一个好的办法。
推荐阅读
-
Shell脚本中多命令逻辑执行顺序的方法详解
-
PHP中执行cmd命令的方法,php执行cmd命令_PHP教程
-
Shell脚本中执行sql语句操作mysql的5种方法
-
python中执行shell命令的几个方法小结
-
Oracle中的一些查询语句及其执行顺序
-
谁能详细的解释一下PHP中 $a=10; $b=$a-- + -- $a; 的执行过程吗?
-
Js中setTimeout()和setInterval() 何时被调用执行的用法_基础知识
-
shell脚本中执行时提示“没有那个文件或目录”的解决办法
-
PHP施行sql语句失败,但同样的语句在MYSQL中可以执行
-
MySQL子查询中order by不生效问题的解决方法