JDK源码笔记03 Float Double Character

something before start

Float Double 稍微看了一眼,这两个类里面几乎没有什么实现,大多数的实现都是通过FloatingDecimal 或者 通过底层非java代码实现的。
没什么看头
等我长大了再去看一下FloatingDecimal好了

Character其实是很丰富的工具类,关于字符的处理基本上都可以用这个类来解决。
但是他的实现基本上都是用位操作和UTF-16的规则来做的,我真看不下去。。
这个博客翻译了一堆注释,里面也有讲一点点关于代码点(codePoint)的方法
关于代码点是什么可以看这个

Character一些方法

//是否是增广字符的高位char
//有了这些方法就可以按位处理字符串,判断增广字符了
public static boolean isHighSurrogate(char ch) 
//一下就可以见闻之意了
public static boolean isLowSurrogate(char ch) 
public static boolean isSurrogate(char ch)
public static boolean isSurrogatePair(char high, char low)
public static int toCodePoint(char high, char low)
public static boolean isBmpCodePoint(int codePoint)
public static boolean isValidCodePoint(int codePoint)
//这个指的是seq[index]位置的字符作为highSurrogate的codePoint,直接返回codePoint或者返回增广字符的codePoint
public static int codePointAt(CharSequence seq, int index)
//同理,前一位为低位,或直接返回
public static int codePointBefore(CharSequence seq, int index)
//获取codePoint的高位
public static char highSurrogate(int codePoint)
public static char lowSurrogate(int codePoint)

//dstIndex是目标的初始下标,增广字符会占用两位
public static int toChars(int codePoint, char[] dst, int dstIndex) 
public static int codePointCount(CharSequence seq, int beginIndex, int endIndex) 
//在unicode中是否被定义了
public static boolean isDefined(char ch) 
public static boolean isDefined(int codePoint)
public static int offsetByCodePoints(CharSequence seq, int index,int codePointOffset) 

策略模式

举个例子

CharacterData0X 是 CharacterData的子类

CharacterData里面有各种字符的判断方法

    public static boolean isWhitespace(int codePoint) {
        return CharacterData.of(codePoint).isWhitespace(codePoint);
    }



    static final CharacterData of(int ch) {
        if (ch >>> 8 == 0) {     // fast-path
            return CharacterDataLatin1.instance;
        } else {
            switch(ch >>> 16) {  //plane 00-16
            case(0):
                return CharacterData00.instance;
            case(1):
                return CharacterData01.instance;
            case(2):
                return CharacterData02.instance;
            case(14):
                return CharacterData0E.instance;
            case(15):   // Private Use
            case(16):   // Private Use
                return CharacterDataPrivateUse.instance;
            default:
                return CharacterDataUndefined.instance;
            }
        }
    }

结束:D

posted @ 2021-06-28 19:11  sarise  阅读(60)  评论(0编辑  收藏  举报