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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 何明辉 于 2012-8-5 12:03 编辑

import java.io.*;
class ReadIn
{
    public static void main(String[] args)throws IOException
   {
      InputStream in=System.in;
      StringBuilder sb=new StringBuilder();
      while(true)
       {
          int ch=in.read();//程序读入的是一个字节流
          if(ch=='\r')
               continue;
         if(ch=='\n')
          {
                String s=sb.toString();
                if("over".equals(s))
                       break;
                System.out.println(s.toUpperCase());
            }
         else
               sb.append((char)ch);//将一个字节转换为字符,并存入容器中。
       }
   }
}
上面的程序中;in.read()为读取一个字节,而(char)ch做了强制转换,但是输入流是通过键盘输入的,当通过键盘输入对应的汉字时那不就破坏了有效数据吗,输出的就不会是汉字了吗,因为汉字是以两个字节存放,所以我认为上面不可以这样强制(虽然可以强制),有没有更好的办法

4 个回复

倒序浏览
import java.io.*;
class Test2
{
    public static void main(String[] args)throws IOException
   {
      BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
      BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(System.out));
      String line=null;
      while((line=bufr.readLine())!=null)
       {
         
                if("over".equals(line))
                       break;
                bufw.write(line);
                bufw.newLine();
                bufw.flush();
       }
   }
}
这种的可以输入中文的

点评

非常感谢,我知道这样可以打出汉字,因为每次都打出一行,就我上面的程序来说,是不是这个转换的地方不能这样转换,如果想录入汉字的话,  发表于 2012-7-31 17:54

评分

参与人数 1技术分 +1 收起 理由
田向向 + 1 赞一个!

查看全部评分

回复 使用道具 举报
涂金哲 发表于 2012-7-31 15:51
import java.io.*;
class Test2
{

Inputstream的read()方法没有读取字符的 强制转换只是为了显示易于阅读 汉字占用两个字节,录入就必须要用增强的方法了 我个人的观点 ,很抱歉
回复 使用道具 举报
恩,输入汉字会破坏数据,汉字两个字节,你按一个字节读取再转换自然不能输出汉字,最好的办法就是把字节流包装成字符流了,那样子就可以输入汉字啦。或者你也可以按自己读取,就需要加以判断看输入的是一个字节还是两个字节,单字节的可以补一个字节那样子就可以都按照双字节转换了。
回复 使用道具 举报
用缓存区技术,如下,
BufferedReader temp=new BufferedReader(new InputStreamReader(System.in));
      BufferedWriter buffw=new BufferedWriter(new OutputStreamWriter(System.out));
      String line=null;
      while((line=temp.readLine())!=null)
       {
         
                if("over".equals(line))
                       break;
                bufw.write(line);
                bufw.newLine();
                bufw.flush();
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马