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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© breeze 中级黑马   /  2013-5-19 10:00  /  1633 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 breeze 于 2013-5-20 22:48 编辑

现在有这样一个字符串"1. abc你好中文deflljj你好Java" 如何能通过字节流将每个字符都输出到控制台上, 因为每个中文都占用两个字节, 如果一个一个读取肯定会乱码, 请高手指点下

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
每个中文都占用两个字节, 如果一个一个读取肯定会乱码,  不是乱码而是会出现半个汉字这个现象。给你我的代码你看一下吧
public class Test10 {
public static void main(String[] args) throws Exception{

            String str = "我爱kfc并且喜欢dota";
            int num = trimGBK(str.getBytes("GBK"),8);//将字符串使用“GBK”编码,并定义截取长度
            System.out.println(str.substring(0,num) );//打印输出

      }
            public static int  trimGBK(byte[] buf,int n){ //定义方法
            int num = 0;
            boolean bChineseFirstHalf = false;  //如果是一半汉字就返回false
            for(int i=0;i<n;i++)

            {

                  if(buf[i]<0 && !bChineseFirstHalf){ //判断是否是汉字

                        bChineseFirstHalf = true;

                  }else{
                        num++;
                        bChineseFirstHalf = false;                     
                  }
            }
            return num;
      }
}

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 赞一个!

查看全部评分

回复 使用道具 举报
转化为字符串的形式,然后在输出。
回复 使用道具 举报
本帖最后由 张金铎 于 2013-5-19 16:23 编辑

可以通过转换流吧,然后用BufferedWriter()输出。
  1. public static void main(String[] args) throws IOException {
  2.                 String s = "我是abc";
  3.                 OutputStream out = System.out;
  4.                 OutputStreamWriter osw = new OutputStreamWriter(out);
  5.                 BufferedWriter bw = new BufferedWriter(osw);
  6.                 bw.write(s);
  7.                 bw.newLine();
  8.                 bw.flush();
  9.                 bw.close();
  10.                
  11.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
貌似问题解决了
要是解决及时更改问题状态,重新编辑为已解决
否则继续追问
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马