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

  • 相关阅读:
    各位AS3各种验证在这里,邮箱 身份证 ...
    各位同学还在为AS3在IE透明模式下弹出新窗口而烦恼吗?
    Flash As3 通过二进制[ByteArray]判断真实的文件类型
    【A8笔记1】Alternativa 8.5.0 在Flash、Fb、Fd中的配置
    超酷光带效果
    flash 墙
    A3D CoverFlow图片展示效果
    Windows8Metro模式IE10放弃Flash的支持
    html5 控件整理
    AS3中JSON的基本应用实例
  • 原文地址:https://www.cnblogs.com/sariseBlog/p/14945907.html
Copyright © 2011-2022 走看看