zoukankan      html  css  js  c++  java
  • Java学习之IO(编码练习--截取字符串根据字节)

     1 public static void main(String[] args) throws IOException {
     2     String str="ab你好cd谢谢";
     3     int len =str.getBytes("gbk").length;
     4     for(int i=0;i<len;i++) {
     5         System.out.println("GBK截取"+(i+1)+"个字节结果是:"+cutStringByBytes(str,i+1));
     6     }
     7     
     8     len =str.getBytes("UTF-8").length;
     9     for(int i=0;i<len;i++) {
    10         System.out.println("UTF截取"+(i+1)+"个字节结果是:"+cutStringByUTFBytes(str,i+1));
    11     }
    12     }
    13 
    14     /**
    15      * 思想:UTF-8编码,中文是三个字节表示,英文是一个字节
    16      * 并且中文字中有第一个字节码是小于零的
    17      * 97,98,-28,-67,-96,-27,-91,-67,99,100,-24,-80,-94,-24,-80,-94
    18      * 根据截取位置向前计数,查看计数除3取余,为零:不舍,为1:舍1位,为21:舍2位
    19      * @param str
    20      * @param len
    21      * @return
    22      * @throws IOException 
    23      */
    24     private static String cutStringByUTFBytes(String str, int len) throws IOException {
    25     byte[] buf=str.getBytes("UTF-8");
    26     int count=0;
    27     for(int i=len-1;i>=0;i--) {
    28         if(buf[i]<0)
    29         count++;
    30         else {
    31         break;
    32         }
    33     }
    34         if(count%3==0)
    35         return new String(buf,0,len,"UTF-8");
    36         else if(count%3==1)
    37         return new String(buf,0,len-1,"UTF-8");
    38         else 
    39         return new String(buf,0,len-2,"UTF-8");
    40     
    41     }
    42 
    43     /**
    44      * 思想:gbk编码,中文是两个字节表示,英文是一个字节
    45      * 并且中文字中有第一个字节码是小于零的
    46      * 97,98,-60,-29,-70,-61,99,100,-48,-69,-48,-69
    47      * 根据截取位置向前计数,查看计数的奇偶数,奇数舍弃,偶数保留
    48      * @param str
    49      * @param len
    50      * @return
    51      * @throws IOException 
    52      */
    53     private static String cutStringByBytes(String str, int len) throws IOException {
    54     byte[] buf=str.getBytes("gbk");
    55     int count=0;
    56     for(int i=len-1;i>=0;i--) {
    57         if(buf[i]<0)
    58         count++;
    59         else {
    60         break;
    61         }
    62     }
    63         if(count%2==0)
    64         return new String(buf,0,len,"gbk");
    65         else 
    66         return new String(buf,0,len-1,"gbk");
    67     }
  • 相关阅读:
    Python面试题之装饰器漫谈
    Python入门之面向对象的__init__和__new__方法
    Python入门之PyCharm中目录directory与包package的区别
    Python中模块(Module)和包(Package)的区别
    详细讲解提高数据库查询效率的实用方法、外键关于性能
    kaptcha验证码插件的使用
    在 Web 项目中应用 Apache Shiro
    SessionFactory、HibernateTemplate、HibernateDaoSupport之间的关系说明
    jquery 绑定省份和城市
    jQuery事件之鼠标事件
  • 原文地址:https://www.cnblogs.com/WarBlog/p/12144331.html
Copyright © 2011-2022 走看看