美文网首页Android开发刻意练习:每天一张思维导图(IT类)Java
《Java编程的逻辑》笔记28--剖析包装类 (下)/剖析Cha

《Java编程的逻辑》笔记28--剖析包装类 (下)/剖析Cha

作者: 天一方蓝 | 来源:发表于2019-07-07 01:01 被阅读1次
    28剖析包装类 (下) 剖析Character.png

    Character有很多静态方法,封装了Unicode字符级别的各种操作,是Java文本处理的基础,注意不是char级别,Unicode字符并不等同于char

    Unicode基础

    Unicode给世界上每个字符分配了一个编号,编号范围从0x000000到0x10FFFF。编号范围在0x0000到0xFFFF之间的字符,为常用字符集,称BMP(Basic Multilingual Plane)字符。编号范围在0x10000到0x10FFFF之间的字符叫做增补字符(supplementary character)。

    • UTF-16
      UTF-16是一种编码方式,或者叫映射方式,它将编号映射为两个或四个字节,对BMP字符,它直接用两个字节表示,对于增补字符,使用四个字节,前两个字节叫高代理项(high surrogate),范围从0xD800到0xDBFF,后两个字节叫低代理项(low surrogate),范围从0xDC00到0xDFFF,UTF-16定义了一个公式,可以将编号与四字节表示进行相互转换。
      Java内部采用UTF-16编码,char表示一个字符,但只能表示BMP中的字符,对于增补字符,需要使用两个char表示,一个表示高代理项,一个表示低代理项

    Character静态方法

    • 判断一个int是不是一个有效的代码单元
    public static boolean isValidCodePoint(int codePoint) 
    

    小于等于0x10FFFF的为有效,大于的为无效

    • 判断一个int是不是BMP字符:
    public static boolean isBmpCodePoint(int codePoint) 
    

    小于等于0xFFFF的为BMP字符,大于的不是

    • 判断一个int是不是增补字符
    public static boolean isSupplementaryCodePoint(int codePoint)
    

    0x010000和0X10FFFF之间的为增补字符。

    • 判断char是否是高代理项:
    public static boolean isHighSurrogate(char ch)
    

    0xD800到0xDBFF为高代理项。
    -判断char是否为低代理项:

    public static boolean isLowSurrogate(char ch) 
    

    0xDC00到0xDFFF为低代理项。

    • 判断char是否为代理项:
    public static boolean isSurrogate(char ch) 
    

    char为低代理项或高代理项,则返回true。

    • 判断两个字符high和low是否分别为高代理项和低代理项
     public static boolean isSurrogatePair(char high, char low) 
    
    • 判断一个代码单元由几个char组成:
     public static int charCount(int codePoint) 
    

    增补字符返回2,BMP字符返回1。

    code point与char的转换

    • 根据高代理项high和低代理项low生成代码单元
    public static int toCodePoint(char high, char low)
    

    这个转换有个公式,这个方法封装了这个公式。

    • 根据代码单元生成char数组,即UTF-16表示
    public static char[] toChars(int codePoint) 
    

    如果code point为BMP字符,则返回的char数组长度为1,如果为增补字符,长度为2,char[0]为高代理项,char[1]为低代理项

    • 将代码单元转换为char数组
    public static int toChars(int codePoint, char[] dst, int dstIndex) 
    
    • 对增补字符code point,生成高代理项和低代理项
    public static char lowSurrogate(int codePoint) public static char highSurrogate(int codePoint) 
    

    按code point处理char数组或序列

    • CharSequence接口
    public interface CharSequence {
        int length();
        char charAt(int index);
        CharSequence subSequence(int start, int end);
        public String toString();
    }
    

    它与一个char数组是类似的,有length方法,有charAt方法根据索引获取字符,String类就实现了该接口
    计算char索引等......

    字符属性

    除了分配编号之外,还分配了一些属性,Character类封装了对Unicode字符属性的检查和操作

    public static int getType(int codePoint)   
    public static int getType(char ch)
    

    Unicode给每个字符分配了一个类型,这个类型是非常重要的,很多其他检查和操作都是基于这个类型的
    字符对应


    字符对应.png

    字符判断,转换的函数......
    字符反转等

    相关文章

      网友评论

        本文标题:《Java编程的逻辑》笔记28--剖析包装类 (下)/剖析Cha

        本文链接:https://www.haomeiwen.com/subject/txbmhctx.html