zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    SQL 实现月度留存率/复购率
    Mac安装mysql数据库,并用navicat链接
    MAC电脑安装git
    form 表格提交
    幼稚从来都是相对的
    Vue 80端口无法使用,直接运行到1024问题
    iOS SDK framework 真机和模拟器合并步骤
    XCODE调试
    UN: Half of Refugee Children Do Not Go to School
    Vue界面传值逻辑
  • 原文地址:https://www.cnblogs.com/sariseBlog/p/14945907.html
Copyright © 2011-2022 走看看