A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

使用BufferedReader和InputStreamReader接收键盘录入并打印,如果录入全是英文没有问题,但是录入中文就会出现问题,为什么?
程序
  1. public class KeyIn2 {

  2.         public static void main(String[] args) throws IOException {

  3.                 BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
  4.                
  5.                 String line = null;
  6.                 while((line = bufr.readLine()) != null){
  7.                         if("over".equals(line))
  8.                                 break;
  9.                         System.out.println(line);
  10.                 }
  11.                
  12.                 bufr.close();
  13.         }

  14. }
复制代码

运行

1.PNG (2.03 KB, 下载次数: 23)

英文没问题

英文没问题

2.PNG (2.46 KB, 下载次数: 23)

中文出现问题

中文出现问题

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

9 个回复

倒序浏览
本帖最后由 渐渐不懂了 于 2014-1-9 15:43 编辑

Reader 用于读入16位字符,也就是Unicode 编码的字符;而 InputStream 用于读入 ASCII 字符和二进制数据。
在转换过程中会出现类型提升所以为错误吧;我也不是和理解你在请教请教大师吧

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
我觉得是你输入汉字的时候光标没有在新的行  而是在 上一次打印结果的前面直接输入汉字 造成的问题
慢点输  注意光标的位置
回复 使用道具 举报
渐渐不懂了 发表于 2014-1-9 15:42
Reader 用于读入16位字符,也就是Unicode 编码的字符;而 InputStream 用于读入 ASCII 字符和二进制数据。
...

InputStreamReader 是字节流通向字符流的桥梁!
回复 使用道具 举报
75100313 发表于 2014-1-9 15:51
InputStreamReader 是字节流通向字符流的桥梁!

哦,那就不晓得了
回复 使用道具 举报
这个程序在eclipse运行时会发生问题,我用dos命令行试了试,结果发现中文英文都正常。这是eclipse的问题。具体就不清楚了。
回复 使用道具 举报
System.out是打印字节的流,而你将System.in转成了字符流

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
山治0712 发表于 2014-1-14 23:18
System.out是打印字节的流,而你将System.in转成了字符流

但是在dos运行完全没有问题。
即使我把输出流也包装一下,在eclipse依然打印有问题、
  1. public class KeyIn2 {

  2.         public static void main(String[] args) throws IOException {

  3.                 BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
  4.                 PrintWriter pw = new PrintWriter(System.out, true);
  5.                
  6.                 String line = null;
  7.                 while((line = bufr.readLine()) != null){
  8.                         if("over".equals(line))
  9.                                 break;
  10.                         pw.println(line);
  11.                 }
  12.                
  13.                 bufr.close();
  14.         }

  15. }
复制代码



点评

赠送1技术分  发表于 2014-1-15 23:54

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
雨的印记yp 发表于 2014-1-15 14:42
但是在dos运行完全没有问题。
即使我把输出流也包装一下,在eclipse依然打印有问题、

我也试了下,在dos下确实没出现问题
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马