Character类

 

/**
  *判断是不是BMP code point
  *BMP 是2的16次方,刚好两个字节,在两个字节以内的整数都可以转化为char
  */
public static boolean isBmpCodePoint(int codePoint) {
        return codePoint >>> 16 == 0;//无符号向右移16位,如果codePoint不是16位的则不会等于0
        
    }

 

/**
  *判断是不是有效的code point,最大值是0x10ffff,小于等于这个值的都是有效的code point
  *MAX_CODE_POINT=0X10FFFF
  */
public static boolean isValidCodePoint(int codePoint) {
        int plane = codePoint >>> 16;//无符号向右移16位
        return plane < ((MAX_CODE_POINT + 1) >>> 16);
    }

 

/**
  * java char字符都是用UTF-16编码的,而一个char是两个字节,最多表示2的16次方=65536种编码
  * 而UTF-16的字符远远超过65536,为了解决这个问题,从char这65536个编号里,拿出2048个,规定它们
  * 是surrogate
  * 编号从U+D800至U+DBFF的规定为「High Surrogates」,共1024个。 
  * 编号为 U+DC00至U+DFFF的规定为「Low Surrogates」,也是1024个, 
  * High+Low组合在一起表示超过65536的UTF-16编码,又可以表示1048576种编码   
  *
  * MIN_LOW_SURROGATE  = '\uDC00'
  */
public static char lowSurrogate(int codePoint) {
        return (char) ((codePoint & 0x3ff) + MIN_LOW_SURROGATE);
    }

/**
  * AC00-D7AF:朝鲜文音节 (Hangul Syllables) 
  * D800-DBFF:High-half zone of UTF-16 
  * DC00-DFFF:Low-half zone of UTF-16 
  * 可以看出,D7B0-D7FF是没有表示UTF-16的编码的,JAVA将这每表示的部分归到了High-Surrogate中
  *
  * MIN_HIGH_SURROGATE = '\uD800'
  * MIN_SUPPLEMENTARY_CODE_POINT = 0x010000
  */
public static char highSurrogate(int codePoint) {
        return (char) ((codePoint >>> 10)
//MIN_HIGH_SURROGATE - (MIN_SUPPLEMENTARY_CODE_POINT >>> 10)=0xD7B0
            + (MIN_HIGH_SURROGATE - (MIN_SUPPLEMENTARY_CODE_POINT >>> 10)));
    }

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值