使用BufferedReader的read()方法时出现重复回车问题的原因咨询
BufferedReader.read() 与 readLine() 行为异常的原因
核心原因
当你调用BufferedReader.read()时,它只会读取单个字符——也就是你手动输入的那个字符,但按下回车后,输入流里实际包含两个内容:你输入的目标字符,加上回车对应的换行符(\n,Windows下是\r\n,但read()只会取第一个)。
而readLine()的逻辑是:读取输入流直到遇到换行符为止,返回换行符之前的所有字符,同时丢弃这个换行符。此时输入流里剩下的正好就是那个没被read()取走的换行符,所以readLine()直接触发“读取完成”,返回空字符串,看起来就像自动跳过了输入步骤。
举个实际场景:你输入x然后回车,输入流里是x\n。
br.read()拿走了x,流里只剩\nbr.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
相关产品推荐
相关产品推荐

