使用Scanner.nextLine()读取字符串失败的技术求助
问题分析与解决
问题根源
scan.nextInt()和scan.nextDouble()仅读取对应类型的数值,不会处理输入时按下的换行符,这个换行符会留在输入缓冲区中。后续调用scan.nextLine()时,会直接读取这个残留的换行符,导致字符串变量s为空,最终输出看不到预期的字符串内容。
解决方案
方法一:处理残留换行符(推荐,支持带空格的完整字符串)
在读取double后,额外调用一次scan.nextLine()来吃掉残留的换行符,再读取目标字符串:
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int i = scan.nextInt(); double d = scan.nextDouble(); scan.nextLine(); // 清除double输入后残留的换行符 String s = scan.nextLine(); scan.close(); System.out.println("String: " + s); System.out.println("Double: " + d); System.out.println("Int: " + i); } }
方法二:使用next()读取字符串(仅适用于无空格的字符串)
如果你的字符串输入不包含空格,可以直接用scan.next()替代scan.nextLine(),它会自动跳过前面的空白字符(包括换行符):
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int i = scan.nextInt(); double d = scan.nextDouble(); String s = scan.next(); // 仅读取无空格的字符串 scan.close(); System.out.println("String: " + s); System.out.println("Double: " + d); System.out.println("Int: " + i); } }
注意事项
- 若需要读取包含空格、制表符的完整一行文本,必须使用方法一,否则
next()会在遇到第一个空格时停止读取。 - 输入时确保按顺序输入整数、浮点数、字符串,每输入一项后按回车即可。
内容的提问来源于stack exchange,提问作者therockhidesamongtherocks
相关产品推荐
相关产品推荐

