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
相关产品推荐
相关产品推荐

