• 取指定的字符串,字符串里面有汉字和字母


    解决这个问题之前,我们须要了解的是,在GBK字符集的编码中汉字占2个字节。字母和其它字符占一个字节,而在utf-8中汉字占3,或者4个字节,字母占2个字节,因为,utf一下占2个3个字节。一下占4个字节,不好拆分出指定的汉字加字母。所以才用gbk的编码格式,汉字占2个字节,字母一个字节。

    在把汉字转换成字节的时候。输出的字节的值小于0,字母转换成字节的时候,输出的值就是其相应的数字。

    在String对象中。它的长度计算,是汉字算一个,字母也算一个

    代码例如以下:

    package com.wj.demo1;


    public class SplitChinese {


    /**
    * @param args
    */
    public static void main(String[] args) throws Exception{
    // TODO Auto-generated method stub


    String st1="我a爱中华abc我爱传智def";
    String st2="a我ABC汉a";//定义的測试字符串
    String st3="ac23好11";
    System.out.println("str is "+st2.length());//无论是否是汉字。都仅仅占用一个字节,得到字符串的长度
    int num=trimGBK(st2.getBytes("GBK"),2);//得到应该截取的长度
    System.out.println(st2.substring(0, num));//输出指定的截取长度
    }


    public static int trimGBK(byte[] buf,int n){
    int num=0;//标志变量,截取的长度
    boolean bChineseFirstHalf=false;//标志是否出现汉字
    System.out.println("the buf size is :"+buf.length);
    for(int i=0;i<n;i++){
    System.out.println("byte[i]="+buf[i]);//打印相应的字节的值
    if(buf[i]<0&&!bChineseFirstHalf){//假设buf[i]<0则为汉字。假设是首次出现的汉字字节则设置为true
    bChineseFirstHalf=true;//2个字节的汉字首,出现的汉字字节
    }else{
    num++;//累加,记录应该截取的长度
    bChineseFirstHalf=false;
    }
    }
    return num;//返回截取的长度
    }



    }



    int num=trimGBK(st2.getBytes("GBK"),2);/的时候输出为

    str is 7
    the buf size is :9
    byte[i]=97
    byte[i]=-50
    a


    int num=trimGBK(st2.getBytes("GBK"),1);/的时候输出为

    str is 7
    the buf size is :9
    byte[i]=97
    a

    int num=trimGBK(st2.getBytes("GBK"),3);/的时候输出为

    str is 7
    the buf size is :9
    byte[i]=97
    byte[i]=-50
    byte[i]=-46
    a我


    int num=trimGBK(st2.getBytes("GBK"),4);/的时候输出为

    str is 7
    the buf size is :9
    byte[i]=97
    byte[i]=-50
    byte[i]=-46
    byte[i]=65
    a我A


    int num=trimGBK(st2.getBytes("GBK"),6);/的时候输出为

    str is 7
    the buf size is :9
    byte[i]=97
    byte[i]=-50
    byte[i]=-46
    byte[i]=65
    byte[i]=66
    byte[i]=67
    a我ABC



    int num=trimGBK(st2.getBytes("GBK"),7);/的时候输出为

    str is 7
    the buf size is :9
    byte[i]=97
    byte[i]=-50
    byte[i]=-46
    byte[i]=65
    byte[i]=66
    byte[i]=67
    byte[i]=-70
    a我ABC


    int num=trimGBK(st2.getBytes("GBK"),8);/的时候输出为

    str is 7
    the buf size is :9
    byte[i]=97
    byte[i]=-50
    byte[i]=-46
    byte[i]=65
    byte[i]=66
    byte[i]=67
    byte[i]=-70
    byte[i]=-70
    a我ABC汉


    int num=trimGBK(st2.getBytes("GBK"),9);/的时候输出为

    str is 7
    the buf size is :9
    byte[i]=97
    byte[i]=-50
    byte[i]=-46
    byte[i]=65
    byte[i]=66
    byte[i]=67
    byte[i]=-70
    byte[i]=-70
    byte[i]=97
    a我ABC汉a


































  • 相关阅读:
    增量更新代码步骤记录
    软件缺陷管理基本流程
    数据库语言(三):MySQL、PostgreSQL、JDBC
    eclipse的使用
    数据库语言(二):SQL语法实例整理
    windows下MySql没有setup.exe时的安装方法
    数学:完全独立于实际场景的情况下定义的概念,可以正确的描述世界
    数学语言和程序语言的对比:面向过程与面向集合&命题
    iOS开发之IMP和SEL(方法和类的反射)
    iOS之UIButton的normal和selected状态切换
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/7130324.html
Copyright © 2020-2023  润新知