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

使用BufferedReader的read()方法时出现重复回车问题的原因咨询

BufferedReader.read() 与 readLine() 行为异常的原因

核心原因

当你调用BufferedReader.read()时,它只会读取单个字符——也就是你手动输入的那个字符,但按下回车后,输入流里实际包含两个内容:你输入的目标字符,加上回车对应的换行符(\n,Windows下是\r\n,但read()只会取第一个)。

而readLine()的逻辑是:读取输入流直到遇到换行符为止,返回换行符之前的所有字符,同时丢弃这个换行符。此时输入流里剩下的正好就是那个没被read()取走的换行符,所以readLine()直接触发“读取完成”,返回空字符串,看起来就像自动跳过了输入步骤。

举个实际场景:你输入x然后回车,输入流里是x\n。

  • br.read()拿走了x,流里只剩\n
  • br.readLine()遇到\n,直接返回空字符串,不需要再等待输入。

解决办法

  • 简单粗暴版:在read()之后额外调用一次read(),把残留的换行符吃掉:
    char c = (char)br.read();
    br.read(); // 读取并丢弃换行符
    String S = br.readLine();
    
  • 更稳妥版:改用readLine()读取整行,再从行字符串里提取第一个字符,避免残留字符问题:
    String firstLine = br.readLine();
    char c = firstLine.charAt(0);
    String S = br.readLine();
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 19:57:07