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

BufferedReader.read()后调用readLine()的多行输入问题咨询

解决BufferedReader先读字符再读下一行单词的问题

这问题我之前踩过坑!你遇到的情况是因为**read()方法只读取了单个字符,但输入时按下的回车(换行符)还留在输入缓冲区里**,接下来的readLine()会直接读取这个空的换行内容,导致程序看起来直接终止了。给你两种靠谱的解决方案:

方案一:读完字符后手动清除换行符

在读取字符后,额外调用一次readLine()(或者更灵活的跳过操作)来丢弃留在缓冲区的换行符,这样后续的readLine()就能正常读取下一行的单词了:

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
char letter = (char) reader.read();
// 丢弃字符后面的换行符(兼容Windows的\r\n和Linux的\n)
reader.readLine(); 
String input = reader.readLine();
// 测试输出
System.out.println("你输入的字符是:" + letter);
System.out.println("你输入的单词是:" + input);

如果担心换行符是\r\n(Windows系统),也可以用skip()配合available()来跳过所有剩余的换行字符:

reader.skip(reader.available());

方案二:统一用readLine()处理输入

更稳妥的方式是全程用readLine()读取输入,第一行取第一个字符,第二行直接拿单词,这样就不会有换行符残留的问题,还能避免read()可能遇到的空输入异常:

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
// 读取第一行,取第一个字符(可以加个非空判断防止报错)
String letterLine = reader.readLine();
char letter = letterLine != null && !letterLine.isEmpty() ? letterLine.charAt(0) : ' ';
// 读取第二行的单词
String input = reader.readLine();
// 测试输出
System.out.println("你输入的字符是:" + letter);
System.out.println("你输入的单词是:" + input);

这个方案兼容不同系统的换行格式,代码容错性也更强,推荐优先使用。

内容的提问来源于stack exchange,提问作者user9525103

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:58:10