zoukankan      html  css  js  c++  java
  • 练习:按字节截取字符

    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);
            
        }
    
    }
  • 相关阅读:
    Vsftpd 3.0.2 正式版发布
    Putdb WebBuilder 6.5 正式版本发布
    SoaBox 1.1.6 GA 发布,SOA 模拟环境
    pynag 0.4.6 发布,Nagios配置和插件管理
    Percona Playback 0.4,MySQL 负荷回放工具
    xombrero 1.3.1 发布,微型 Web 浏览器
    Hypertable 0.9.6.4 发布,分布式数据库
    libmemcached 1.0.11 发布
    CryptoHeaven 3.7 发布,安全邮件解决方案
    Android Activity生命周期
  • 原文地址:https://www.cnblogs.com/qjlbky/p/5926237.html
Copyright © 2011-2022 走看看