• 练习:按字节截取字符


    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);
            
        }
    
    }
  • 相关阅读:
    SASS用法指南(转)
    前端框架参考
    NodeJS路由(server.js + router.js)
    NodeJS收发GET和POST请求
    node中的对象
    《怪兽必须死》游戏框架分析
    Git学习笔记(SourceTree克隆、提交、推送、拉取等)
    以前做的H5推广小游戏(活动及派发奖品形式)
    Egret3D初步学习笔记四 (地形使用)
    Egret3D初步学习笔记三 (角色使用)
  • 原文地址:https://www.cnblogs.com/qjlbky/p/5926237.html
Copyright © 2020-2023  润新知