黑马程序员技术交流社区

标题: IO流方面的问题,求大神指导 [打印本页]

作者: 七宝    时间: 2013-8-16 01:45
标题: IO流方面的问题,求大神指导
本帖最后由 七宝 于 2013-8-17 19:46 编辑

前几天做了个题目,题目是:
1 编写函数,从一个字符串中按字节数截取一部分,但不能截取出半个中文(GBK码表)
例如:从“HM程序员”中截取2个字节是“HM”,截取4个则是“HM程”,截取3个字节也要是"HM"而不要出现半个中文

想问下,题目要考的是转换流嘛,先用字节流读取,然后转换成字符流,是这样的嘛。


作者: 兜兜转转    时间: 2013-8-16 09:20
其实呢你的问题描述的感觉怪怪的,按照GBK编码的话,一个中文字符是2个字节,假如你直接用字节流去读取的话,你最好是定一个2的倍数的byte数组去缓冲装这些读出来的字节,然后使用new String(byte[] b, int offset, int length )将他专程字符。

那如果你用转换流的话,读取出来的就是字符了,因为底层已经为你做铺垫了。
作者: 七宝    时间: 2013-8-16 09:43
兜兜转转 发表于 2013-8-16 09:20
其实呢你的问题描述的感觉怪怪的,按照GBK编码的话,一个中文字符是2个字节,假如你直接用字节流去读取的话 ...

问题以举例写全
作者: 兜兜转转    时间: 2013-8-16 10:10
七宝 发表于 2013-8-16 09:43
问题以举例写全

能截取一个字节吗?
作者: 七宝    时间: 2013-8-16 10:22
兜兜转转 发表于 2013-8-16 10:10
能截取一个字节吗?

题目就是这样的,这是黑马给我的基础测试最后一题,我就是这个不怎么清楚

作者: 兜兜转转    时间: 2013-8-16 10:43
本帖最后由 兜兜转转 于 2013-8-16 10:48 编辑



import java.io.FileInputStream;
import java.io.FileNotFoundException;

public class IODemo
{


        public static void main(String[] args) throws Exception
        {
                 String str = cutout("D:\\javaTest\\1.txt", 18);
                 System.out.println(str);

        }
        public static String cutout(String file, int length) throws Exception
        {
                FileInputStream fis = new FileInputStream(file);
                   if(length != 1 && (length%2)!=0)
                   {
                              --length;
                   }
                   if(length == 1)
                   {
                           ++length;//为了防止请求读一个字节,又是中文子的话,造成的乱码,判断如果是一个字节就length加1,去截取两个。
                   }
                    byte[] b = new byte[length];
                    int count = fis.read(b);
                    String str = new String(b,0,count);
                    return str;
        }

}
是这个效果吗?

作者: 神之梦    时间: 2013-8-16 22:01
俩大神继续讨论
作者: 兜兜转转    时间: 2013-8-17 07:41
神之梦 发表于 2013-8-16 22:01
俩大神继续讨论

关键发题那哥们,也不看看我写的符不符合他的要求,别叫大神,你107的技术分,你才是大神,我离黑马还很远

作者: 神之梦    时间: 2013-8-17 14:24
兜兜转转 发表于 2013-8-17 07:41
关键发题那哥们,也不看看我写的符不符合他的要求,别叫大神,你107的技术分,你才是大神,我离黑马还很 ...

技术分只要在论坛呆久了就有了,技术就不一定了

作者: 施大勇    时间: 2013-8-17 17:09
我怎么感觉有点像是用回退流的意思呢?这里我也不明白啊,高手快来来回答啊,学习 顶起!!!!!!!!!!!!!!!!
作者: 兜兜转转    时间: 2013-8-17 19:30
啥叫回退流?
作者: 七宝    时间: 2013-8-17 19:43
兜兜转转 发表于 2013-8-17 07:41
关键发题那哥们,也不看看我写的符不符合他的要求,别叫大神,你107的技术分,你才是大神,我离黑马还很 ...

我一般晚上在,白天在睡觉,我看了,主要是我也不是很确定
作者: 七宝    时间: 2013-8-17 19:46
兜兜转转 发表于 2013-8-16 10:43
import java.io.FileInputStream;
import java.io.FileNotFoundException;

应该是这样的吧
作者: 许云龙    时间: 2013-8-25 10:52
基础测试题的题目你不独立完成,怎么到论坛来问了?虽然是已近解决了,但是我还是想把代码分享给你
  1. package com.itheima;
  2. /**
  3. * 10、 编写函数,从一个字符串中按字节数截取一部分,但不能截取出半个中文(GBK码表)

  4. 例如:从“HM程序员”中截取2个字节是“HM”,截取4个则是“HM程”,截取3个字节也要是"HM"而不要出现半个中文
  5. * @author Administrator
  6. */
  7. public class Test10 {
  8.         public static void main(String[] args){
  9.                 String oldStr = "HM程序员";
  10.                
  11.                 String newStr = mySplit(oldStr, 5); //调用自定义方法传入字符串和要截取的字节数
  12.                
  13.                 System.out.println(newStr); //打印取出的字符串
  14.                
  15.         }
  16.         public static String mySplit(String str,int len)
  17.         {
  18.                 StringBuilder sb = new StringBuilder(); //定义StringBuilder用于存储字符串
  19.                
  20.                 byte[] buf = str.getBytes(); //将传入的字符串转成字符数组
  21.                
  22.                 sb.append(new String(buf,0,len));//往StringBuilder中添加用户需要的部分
  23.                
  24.                 int count=0; //定义变量,用于记录存入StringBuilder小于0的字节个数
  25.                
  26.                 for(int i =0;i<len;i++)
  27.                 {
  28.                         if(buf[i]<0)
  29.                                 count++;
  30.                 }
  31.                
  32.                 if(count%2!=0) //如果是奇数
  33.                         sb.deleteCharAt(sb.length()-1);//删除最后一个字符
  34.                
  35.                 return sb.toString();// 将符合规则的字符串返回。
  36.         }
  37. }
复制代码

作者: guohaichang    时间: 2015-6-2 11:28
好,学习了,感谢大神级别的你们




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2