码迷,mamicode.com
首页 > 其他好文 > 详细

练习:按字节截取字符

时间:2016-10-01 21:40:31      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:

import java.io.UnsupportedEncodingException;

public class TheLastTestForIO {

    public static void main(String[] args) throws UnsupportedEncodingException {
        
        /*
         * 按照字节数截取一个字符串,"abc你好"如果截取到半个中文,舍弃。
         * 比如,截取4个字节,abc,截取五个字节,abc你
         * 
         * 字符串-->字节数组。编码
         * 字节数组-->字符串。解码。
         * 
         * 
         * 思路:
         * 1.中文两个字节都是负数
         * 2.判断截取的最后一个字节是否是负数
         * 如果不是,直接截取
         * 如果是,就往回判断前一个是否是负数,并记录住负数的个数,如果连续的负数个数有奇数个,舍弃最后一个字节
         *如果连续的负数是偶数个,不舍弃,欧耶! 
         */
        
        //字符串转成字节数组
        String str = "abc你好";
        str = "a飝飝b飝";
        byte[] buf = str.getBytes("GBK");
        
        /*for(byte b:buf){
            System.out.println(b);
        }*/
        
        for (int i = 0; i < buf.length; i++) {
            String s =  cutStringByCount(str,i+1);
            System.out.println("截取"+(i+1)+"个字节是:"+s);
        }
        
        
    }

    public static String cutStringByCount(String str, int len) throws UnsupportedEncodingException {
        
        //1.将字符串转成字节数组,因为要判断截取的字节是否是负数,先有字节。
        byte[] buf = str.getBytes("GBK");
        //2.定义计数器,记录负数的个数
        int count = 0;
        //3.对字节数组进行遍历,应该从截取长度的最后一个字节开始判断,并往回判断
        for(int x=len-1;x>=0;x--){
            //4.遍历过程中只要是负数计数器就+1,只要不是负数,直接结束遍历
            if(buf[x]<0)count++;
            else break;
        }
        
        //5.对遍历后,计数器的值进行判断,奇数就舍弃最后一个字节,并将字节数组转成字符串。
        //偶数就不舍弃,将字节数组转成字符串
        if(count%2==0)
            return new String(buf,0,len);
        else
            return new String(buf,0,len-1);
        
    }

}

 

练习:按字节截取字符

标签:

原文地址:http://www.cnblogs.com/qjlbky/p/5926237.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!