You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:34:55