Java中无法连续输入两个字符串?程序输入一个字符串后终止
为什么Java中用Scanner无法连续输入两个字符串?
这个问题我之前也踩过坑!核心原因是Scanner的不同输入方法对换行符的处理逻辑不一样,咱们一步步拆解你的代码问题:
问题根源
你先用了scn.nextInt()读取整数T,这个方法只会读取输入中的数字部分,而你输入数字后按下的回车键(也就是换行符\n)会留在输入缓冲区里。
接下来执行String s1 = scn.nextLine();时,nextLine()的逻辑是读取从当前位置到换行符的所有内容,然后丢弃这个换行符。这时候缓冲区里正好留着nextInt()剩下的换行符,所以nextLine()直接读取到了一个空字符串,根本不会等待你输入s1。
然后执行String s2 = scn.nextLine();,这时候缓冲区已经空了,程序会等待你输入——但你可能误以为刚才输入的内容是s1,输入后程序直接执行输出、T减1、循环结束,所以感觉“输入第一个字符串后程序就终止了,没询问s2”。
解决方法
有两种简单的修复方式:
方法1:在nextInt()后手动消耗换行符
在读取完T之后,额外调用一次scn.nextLine()把残留的换行符吃掉,后续的nextLine()就能正常等待输入了:
public static void main (String[] args) { Scanner scn= new Scanner(System.in); int T ; T=scn.nextInt(); scn.nextLine(); // 消耗掉nextInt()留下的换行符 while(T!=0){ String s1 = scn.nextLine(); // 现在会正常等待输入s1 String s2 = scn.nextLine(); // 正常等待输入s2 System.out.println(isMetaString(s1,s2)); T--; } }
方法2:全程用nextLine()读取输入
把读取T的操作也换成nextLine(),然后转换成整数,这样就不会有残留换行符的问题:
public static void main (String[] args) { Scanner scn= new Scanner(System.in); int T ; String tInput = scn.nextLine(); T = Integer.parseInt(tInput); // 将字符串转成整数 while(T!=0){ String s1 = scn.nextLine(); String s2 = scn.nextLine(); System.out.println(isMetaString(s1,s2)); T--; } }
额外提醒
Scanner的next()方法和nextInt()类似,也只会读取到空白字符(空格、换行等)为止,同样会留下后面的空白符在缓冲区里。如果后续要搭配nextLine()使用,都要记得处理残留的换行符哦!
内容的提问来源于stack exchange,提问作者Ravi Kiran Krovvidi
相关产品推荐
相关产品推荐

