Java源码浅析,Character(2)

源码分析,基本上都加载注解上了,如有谬误,请指正,谢谢。
Character由于比较长,只能分多篇了

package com.jiyx.test.java.lang;

import java.io.Serializable;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;

/**
 * auther: jiyx
 * date: 2018/9/13.
 */
public class Character implements Serializable, Comparable {
/**
     * 一系列字符子集,表示Unicode规范中的字符块,
     * 字符块通常定义用于特定脚本或目的的字符,
     * 字符最多包含一个Unicode块
     *
     * @since 1.2
     */
    public static final class UnicodeBlock extends Character.Subset {

        private static Map map = new HashMap<>(256);

        /**
         * 根据指定的标识符创建unicode块。这个标识符必须与块标识符相同
         */
        private UnicodeBlock(String idName) {
            super(idName);
            map.put(idName, this);
        }

        /**
         * 根据标识符和别名创建unicode块
         */
        private UnicodeBlock(String idName, String alias) {
            this(idName);
            map.put(alias, this);
        }

        /**
         * 根据标识符和别名创建unicode块
         */
        private UnicodeBlock(String idName, String... aliases) {
            this(idName);
            for (String alias : aliases)
                map.put(alias, this);
        }

        /**
         * 接下来都是创建各种unicode块
         * 可以直接根据英文解读
         * 因为篇幅问题只能显示部分
         */

        /**
         * Constant for the "Basic Latin" Unicode character block.
         *
         * @since 1.2
         */
        public static final UnicodeBlock BASIC_LATIN =
                new UnicodeBlock("BASIC_LATIN",
                        "BASIC LATIN",
                        "BASICLATIN");

        /**
         * Constant for the "Latin-1 Supplement" Unicode character block.
         *
         * @since 1.2
         */
        public static final Character.UnicodeBlock LATIN_1_SUPPLEMENT =
                new Character.UnicodeBlock("LATIN_1_SUPPLEMENT",
                        "LATIN-1 SUPPLEMENT",
                        "LATIN-1SUPPLEMENT");
        
        /**
         * 对应的unicode快的,unicode起始位的起始数组
         */
        private static final int blockStarts[] = {
                0x0000,   // 0000..007F; Basic Latin
                0x0080,   // 0080..00FF; Latin-1 Supplement
                0x0100,   // 0100..017F; Latin Extended-A
                0x0180,   // 0180..024F; Latin Extended-B
                0x0250,   // 0250..02AF; IPA Extensions
                0x02B0,   // 02B0..02FF; Spacing Modifier Letters
                0x0300,   // 0300..036F; Combining Diacritical Marks
                0x0370,   // 0370..03FF; Greek and Coptic
                0x0400,   // 0400..04FF; Cyrillic
                0x0500,   // 0500..052F; Cyrillic Supplement
                0x0530,   // 0530..058F; Armenian
                0x0590,   // 0590..05FF; Hebrew
                0x0600,   // 0600..06FF; Arabic
                0x0700,   // 0700..074F; Syriac
                0x0750,   // 0750..077F; Arabic Supplement
                0x0780,   // 0780..07BF; Thaana
                0x07C0,   // 07C0..07FF; NKo
                0x0800,   // 0800..083F; Samaritan
                0x0840,   // 0840..085F; Mandaic
                0x0860,   //             unassigned
                0x08A0,   // 08A0..08FF; Arabic Extended-A
                0x0900,   // 0900..097F; Devanagari
                0x0980,   // 0980..09FF; Bengali
                0x0A00,   // 0A00..0A7F; Gurmukhi
                0x0A80,   // 0A80..0AFF; Gujarati
                0x0B00,   // 0B00..0B7F; Oriya
                0x0B80,   // 0B80..0BFF; Tamil
                0x0C00,   // 0C00..0C7F; Telugu
                0x0C80,   // 0C80..0CFF; Kannada
                0x0D00,   // 0D00..0D7F; Malayalam
                0x0D80,   // 0D80..0DFF; Sinhala
                0x0E00,   // 0E00..0E7F; Thai
                0x0E80,   // 0E80..0EFF; Lao
                0x0F00,   // 0F00..0FFF; Tibetan
                0x1000,   // 1000..109F; Myanmar
                0x10A0,   // 10A0..10FF; Georgian
                0x1100,   // 1100..11FF; Hangul Jamo
                0x1200,   // 1200..137F; Ethiopic
                0x1380,   // 1380..139F; Ethiopic Supplement
                0x13A0,   // 13A0..13FF; Cherokee
                0x1400,   // 1400..167F; Unified Canadian Aboriginal Syllabics
                0x1680,   // 1680..169F; Ogham
                0x16A0,   // 16A0..16FF; Runic
                0x1700,   // 1700..171F; Tagalog
                0x1720,   // 1720..173F; Hanunoo
                0x1740,   // 1740..175F; Buhid
                0x1760,   // 1760..177F; Tagbanwa
                0x1780,   // 1780..17FF; Khmer
                0x1800,   // 1800..18AF; Mongolian
                0x18B0,   // 18B0..18FF; Unified Canadian Aboriginal Syllabics Extended
                0x1900,   // 1900..194F; Limbu
                0x1950,   // 1950..197F; Tai Le
                0x1980,   // 1980..19DF; New Tai Lue
                0x19E0,   // 19E0..19FF; Khmer Symbols
                0x1A00,   // 1A00..1A1F; Buginese
                0x1A20,   // 1A20..1AAF; Tai Tham
                0x1AB0,   //             unassigned
                0x1B00,   // 1B00..1B7F; Balinese
                0x1B80,   // 1B80..1BBF; Sundanese
                0x1BC0,   // 1BC0..1BFF; Batak
                0x1C00,   // 1C00..1C4F; Lepcha
                0x1C50,   // 1C50..1C7F; Ol Chiki
                0x1C80,   //             unassigned
                0x1CC0,   // 1CC0..1CCF; Sundanese Supplement
                0x1CD0,   // 1CD0..1CFF; Vedic Extensions
                0x1D00,   // 1D00..1D7F; Phonetic Extensions
                0x1D80,   // 1D80..1DBF; Phonetic Extensions Supplement
                0x1DC0,   // 1DC0..1DFF; Combining Diacritical Marks Supplement
                0x1E00,   // 1E00..1EFF; Latin Extended Additional
                0x1F00,   // 1F00..1FFF; Greek Extended
                0x2000,   // 2000..206F; General Punctuation
                0x2070,   // 2070..209F; Superscripts and Subscripts
                0x20A0,   // 20A0..20CF; Currency Symbols
                0x20D0,   // 20D0..20FF; Combining Diacritical Marks for Symbols
                0x2100,   // 2100..214F; Letterlike Symbols
                0x2150,   // 2150..218F; Number Forms
                0x2190,   // 2190..21FF; Arrows
                0x2200,   // 2200..22FF; Mathematical Operators
                0x2300,   // 2300..23FF; Miscellaneous Technical
                0x2400,   // 2400..243F; Control Pictures
                0x2440,   // 2440..245F; Optical Character Recognition
                0x2460,   // 2460..24FF; Enclosed Alphanumerics
                0x2500,   // 2500..257F; Box Drawing
                0x2580,   // 2580..259F; Block Elements
                0x25A0,   // 25A0..25FF; Geometric Shapes
                0x2600,   // 2600..26FF; Miscellaneous Symbols
                0x2700,   // 2700..27BF; Dingbats
                0x27C0,   // 27C0..27EF; Miscellaneous Mathematical Symbols-A
                0x27F0,   // 27F0..27FF; Supplemental Arrows-A
                0x2800,   // 2800..28FF; Braille Patterns
                0x2900,   // 2900..297F; Supplemental Arrows-B
                0x2980,   // 2980..29FF; Miscellaneous Mathematical Symbols-B
                0x2A00,   // 2A00..2AFF; Supplemental Mathematical Operators
                0x2B00,   // 2B00..2BFF; Miscellaneous Symbols and Arrows
                0x2C00,   // 2C00..2C5F; Glagolitic
                0x2C60,   // 2C60..2C7F; Latin Extended-C
                0x2C80,   // 2C80..2CFF; Coptic
                0x2D00,   // 2D00..2D2F; Georgian Supplement
                0x2D30,   // 2D30..2D7F; Tifinagh
                0x2D80,   // 2D80..2DDF; Ethiopic Extended
                0x2DE0,   // 2DE0..2DFF; Cyrillic Extended-A
                0x2E00,   // 2E00..2E7F; Supplemental Punctuation
                0x2E80,   // 2E80..2EFF; CJK Radicals Supplement
                0x2F00,   // 2F00..2FDF; Kangxi Radicals
                0x2FE0,   //             unassigned
                0x2FF0,   // 2FF0..2FFF; Ideographic Description Characters
                0x3000,   // 3000..303F; CJK Symbols and Punctuation
                0x3040,   // 3040..309F; Hiragana
                0x30A0,   // 30A0..30FF; Katakana
                0x3100,   // 3100..312F; Bopomofo
                0x3130,   // 3130..318F; Hangul Compatibility Jamo
                0x3190,   // 3190..319F; Kanbun
                0x31A0,   // 31A0..31BF; Bopomofo Extended
                0x31C0,   // 31C0..31EF; CJK Strokes
                0x31F0,   // 31F0..31FF; Katakana Phonetic Extensions
                0x3200,   // 3200..32FF; Enclosed CJK Letters and Months
                0x3300,   // 3300..33FF; CJK Compatibility
                0x3400,   // 3400..4DBF; CJK Unified Ideographs Extension A
                0x4DC0,   // 4DC0..4DFF; Yijing Hexagram Symbols
                0x4E00,   // 4E00..9FFF; CJK Unified Ideographs
                0xA000,   // A000..A48F; Yi Syllables
                0xA490,   // A490..A4CF; Yi Radicals
                0xA4D0,   // A4D0..A4FF; Lisu
                0xA500,   // A500..A63F; Vai
                0xA640,   // A640..A69F; Cyrillic Extended-B
                0xA6A0,   // A6A0..A6FF; Bamum
                0xA700,   // A700..A71F; Modifier Tone Letters
                0xA720,   // A720..A7FF; Latin Extended-D
                0xA800,   // A800..A82F; Syloti Nagri
                0xA830,   // A830..A83F; Common Indic Number Forms
                0xA840,   // A840..A87F; Phags-pa
                0xA880,   // A880..A8DF; Saurashtra
                0xA8E0,   // A8E0..A8FF; Devanagari Extended
                0xA900,   // A900..A92F; Kayah Li
                0xA930,   // A930..A95F; Rejang
                0xA960,   // A960..A97F; Hangul Jamo Extended-A
                0xA980,   // A980..A9DF; Javanese
                0xA9E0,   //             unassigned
                0xAA00,   // AA00..AA5F; Cham
                0xAA60,   // AA60..AA7F; Myanmar Extended-A
                0xAA80,   // AA80..AADF; Tai Viet
                0xAAE0,   // AAE0..AAFF; Meetei Mayek Extensions
                0xAB00,   // AB00..AB2F; Ethiopic Extended-A
                0xAB30,   //             unassigned
                0xABC0,   // ABC0..ABFF; Meetei Mayek
                0xAC00,   // AC00..D7AF; Hangul Syllables
                0xD7B0,   // D7B0..D7FF; Hangul Jamo Extended-B
                0xD800,   // D800..DB7F; High Surrogates
                0xDB80,   // DB80..DBFF; High Private Use Surrogates
                0xDC00,   // DC00..DFFF; Low Surrogates
                0xE000,   // E000..F8FF; Private Use Area
                0xF900,   // F900..FAFF; CJK Compatibility Ideographs
                0xFB00,   // FB00..FB4F; Alphabetic Presentation Forms
                0xFB50,   // FB50..FDFF; Arabic Presentation Forms-A
                0xFE00,   // FE00..FE0F; Variation Selectors
                0xFE10,   // FE10..FE1F; Vertical Forms
                0xFE20,   // FE20..FE2F; Combining Half Marks
                0xFE30,   // FE30..FE4F; CJK Compatibility Forms
                0xFE50,   // FE50..FE6F; Small Form Variants
                0xFE70,   // FE70..FEFF; Arabic Presentation Forms-B
                0xFF00,   // FF00..FFEF; Halfwidth and Fullwidth Forms
                0xFFF0,   // FFF0..FFFF; Specials
                0x10000,  // 10000..1007F; Linear B Syllabary
                0x10080,  // 10080..100FF; Linear B Ideograms
                0x10100,  // 10100..1013F; Aegean Numbers
                0x10140,  // 10140..1018F; Ancient Greek Numbers
                0x10190,  // 10190..101CF; Ancient Symbols
                0x101D0,  // 101D0..101FF; Phaistos Disc
                0x10200,  //               unassigned
                0x10280,  // 10280..1029F; Lycian
                0x102A0,  // 102A0..102DF; Carian
                0x102E0,  //               unassigned
                0x10300,  // 10300..1032F; Old Italic
                0x10330,  // 10330..1034F; Gothic
                0x10350,  //               unassigned
                0x10380,  // 10380..1039F; Ugaritic
                0x103A0,  // 103A0..103DF; Old Persian
                0x103E0,  //               unassigned
                0x10400,  // 10400..1044F; Deseret
                0x10450,  // 10450..1047F; Shavian
                0x10480,  // 10480..104AF; Osmanya
                0x104B0,  //               unassigned
                0x10800,  // 10800..1083F; Cypriot Syllabary
                0x10840,  // 10840..1085F; Imperial Aramaic
                0x10860,  //               unassigned
                0x10900,  // 10900..1091F; Phoenician
                0x10920,  // 10920..1093F; Lydian
                0x10940,  //               unassigned
                0x10980,  // 10980..1099F; Meroitic Hieroglyphs
                0x109A0,  // 109A0..109FF; Meroitic Cursive
                0x10A00,  // 10A00..10A5F; Kharoshthi
                0x10A60,  // 10A60..10A7F; Old South Arabian
                0x10A80,  //               unassigned
                0x10B00,  // 10B00..10B3F; Avestan
                0x10B40,  // 10B40..10B5F; Inscriptional Parthian
                0x10B60,  // 10B60..10B7F; Inscriptional Pahlavi
                0x10B80,  //               unassigned
                0x10C00,  // 10C00..10C4F; Old Turkic
                0x10C50,  //               unassigned
                0x10E60,  // 10E60..10E7F; Rumi Numeral Symbols
                0x10E80,  //               unassigned
                0x11000,  // 11000..1107F; Brahmi
                0x11080,  // 11080..110CF; Kaithi
                0x110D0,  // 110D0..110FF; Sora Sompeng
                0x11100,  // 11100..1114F; Chakma
                0x11150,  //               unassigned
                0x11180,  // 11180..111DF; Sharada
                0x111E0,  //               unassigned
                0x11680,  // 11680..116CF; Takri
                0x116D0,  //               unassigned
                0x12000,  // 12000..123FF; Cuneiform
                0x12400,  // 12400..1247F; Cuneiform Numbers and Punctuation
                0x12480,  //               unassigned
                0x13000,  // 13000..1342F; Egyptian Hieroglyphs
                0x13430,  //               unassigned
                0x16800,  // 16800..16A3F; Bamum Supplement
                0x16A40,  //               unassigned
                0x16F00,  // 16F00..16F9F; Miao
                0x16FA0,  //               unassigned
                0x1B000,  // 1B000..1B0FF; Kana Supplement
                0x1B100,  //               unassigned
                0x1D000,  // 1D000..1D0FF; Byzantine Musical Symbols
                0x1D100,  // 1D100..1D1FF; Musical Symbols
                0x1D200,  // 1D200..1D24F; Ancient Greek Musical Notation
                0x1D250,  //               unassigned
                0x1D300,  // 1D300..1D35F; Tai Xuan Jing Symbols
                0x1D360,  // 1D360..1D37F; Counting Rod Numerals
                0x1D380,  //               unassigned
                0x1D400,  // 1D400..1D7FF; Mathematical Alphanumeric Symbols
                0x1D800,  //               unassigned
                0x1EE00,  // 1EE00..1EEFF; Arabic Mathematical Alphabetic Symbols
                0x1EF00,  //               unassigned
                0x1F000,  // 1F000..1F02F; Mahjong Tiles
                0x1F030,  // 1F030..1F09F; Domino Tiles
                0x1F0A0,  // 1F0A0..1F0FF; Playing Cards
                0x1F100,  // 1F100..1F1FF; Enclosed Alphanumeric Supplement
                0x1F200,  // 1F200..1F2FF; Enclosed Ideographic Supplement
                0x1F300,  // 1F300..1F5FF; Miscellaneous Symbols And Pictographs
                0x1F600,  // 1F600..1F64F; Emoticons
                0x1F650,  //               unassigned
                0x1F680,  // 1F680..1F6FF; Transport And Map Symbols
                0x1F700,  // 1F700..1F77F; Alchemical Symbols
                0x1F780,  //               unassigned
                0x20000,  // 20000..2A6DF; CJK Unified Ideographs Extension B
                0x2A6E0,  //               unassigned
                0x2A700,  // 2A700..2B73F; CJK Unified Ideographs Extension C
                0x2B740,  // 2B740..2B81F; CJK Unified Ideographs Extension D
                0x2B820,  //               unassigned
                0x2F800,  // 2F800..2FA1F; CJK Compatibility Ideographs Supplement
                0x2FA20,  //               unassigned
                0xE0000,  // E0000..E007F; Tags
                0xE0080,  //               unassigned
                0xE0100,  // E0100..E01EF; Variation Selectors Supplement
                0xE01F0,  //               unassigned
                0xF0000,  // F0000..FFFFF; Supplementary Private Use Area-A
                0x100000  // 100000..10FFFF; Supplementary Private Use Area-B
        };

        /**
         * unicode代码块数组
         */
        private static final Character.UnicodeBlock[] blocks = {
                BASIC_LATIN,
                LATIN_1_SUPPLEMENT,
                LATIN_EXTENDED_A,
                LATIN_EXTENDED_B,
                IPA_EXTENSIONS,
                SPACING_MODIFIER_LETTERS,
                COMBINING_DIACRITICAL_MARKS,
                GREEK,
                CYRILLIC,
                CYRILLIC_SUPPLEMENTARY,
                ARMENIAN,
                HEBREW,
                ARABIC,
                SYRIAC,
                ARABIC_SUPPLEMENT,
                THAANA,
                NKO,
                SAMARITAN,
                MANDAIC,
                null,
                ARABIC_EXTENDED_A,
                DEVANAGARI,
                BENGALI,
                GURMUKHI,
                GUJARATI,
                ORIYA,
                TAMIL,
                TELUGU,
                KANNADA,
                MALAYALAM,
                SINHALA,
                THAI,
                LAO,
                TIBETAN,
                MYANMAR,
                GEORGIAN,
                HANGUL_JAMO,
                ETHIOPIC,
                ETHIOPIC_SUPPLEMENT,
                CHEROKEE,
                UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS,
                OGHAM,
                RUNIC,
                TAGALOG,
                HANUNOO,
                BUHID,
                TAGBANWA,
                KHMER,
                MONGOLIAN,
                UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS_EXTENDED,
                LIMBU,
                TAI_LE,
                NEW_TAI_LUE,
                KHMER_SYMBOLS,
                BUGINESE,
                TAI_THAM,
                null,
                BALINESE,
                SUNDANESE,
                BATAK,
                LEPCHA,
                OL_CHIKI,
                null,
                SUNDANESE_SUPPLEMENT,
                VEDIC_EXTENSIONS,
                PHONETIC_EXTENSIONS,
                PHONETIC_EXTENSIONS_SUPPLEMENT,
                COMBINING_DIACRITICAL_MARKS_SUPPLEMENT,
                LATIN_EXTENDED_ADDITIONAL,
                GREEK_EXTENDED,
                GENERAL_PUNCTUATION,
                SUPERSCRIPTS_AND_SUBSCRIPTS,
                CURRENCY_SYMBOLS,
                COMBINING_MARKS_FOR_SYMBOLS,
                LETTERLIKE_SYMBOLS,
                NUMBER_FORMS,
                ARROWS,
                MATHEMATICAL_OPERATORS,
                MISCELLANEOUS_TECHNICAL,
                CONTROL_PICTURES,
                OPTICAL_CHARACTER_RECOGNITION,
                ENCLOSED_ALPHANUMERICS,
                BOX_DRAWING,
                BLOCK_ELEMENTS,
                GEOMETRIC_SHAPES,
                MISCELLANEOUS_SYMBOLS,
                DINGBATS,
                MISCELLANEOUS_MATHEMATICAL_SYMBOLS_A,
                SUPPLEMENTAL_ARROWS_A,
                BRAILLE_PATTERNS,
                SUPPLEMENTAL_ARROWS_B,
                MISCELLANEOUS_MATHEMATICAL_SYMBOLS_B,
                SUPPLEMENTAL_MATHEMATICAL_OPERATORS,
                MISCELLANEOUS_SYMBOLS_AND_ARROWS,
                GLAGOLITIC,
                LATIN_EXTENDED_C,
                COPTIC,
                GEORGIAN_SUPPLEMENT,
                TIFINAGH,
                ETHIOPIC_EXTENDED,
                CYRILLIC_EXTENDED_A,
                SUPPLEMENTAL_PUNCTUATION,
                CJK_RADICALS_SUPPLEMENT,
                KANGXI_RADICALS,
                null,
                IDEOGRAPHIC_DESCRIPTION_CHARACTERS,
                CJK_SYMBOLS_AND_PUNCTUATION,
                HIRAGANA,
                KATAKANA,
                BOPOMOFO,
                HANGUL_COMPATIBILITY_JAMO,
                KANBUN,
                BOPOMOFO_EXTENDED,
                CJK_STROKES,
                KATAKANA_PHONETIC_EXTENSIONS,
                ENCLOSED_CJK_LETTERS_AND_MONTHS,
                CJK_COMPATIBILITY,
                CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A,
                YIJING_HEXAGRAM_SYMBOLS,
                CJK_UNIFIED_IDEOGRAPHS,
                YI_SYLLABLES,
                YI_RADICALS,
                LISU,
                VAI,
                CYRILLIC_EXTENDED_B,
                BAMUM,
                MODIFIER_TONE_LETTERS,
                LATIN_EXTENDED_D,
                SYLOTI_NAGRI,
                COMMON_INDIC_NUMBER_FORMS,
                PHAGS_PA,
                SAURASHTRA,
                DEVANAGARI_EXTENDED,
                KAYAH_LI,
                REJANG,
                HANGUL_JAMO_EXTENDED_A,
                JAVANESE,
                null,
                CHAM,
                MYANMAR_EXTENDED_A,
                TAI_VIET,
                MEETEI_MAYEK_EXTENSIONS,
                ETHIOPIC_EXTENDED_A,
                null,
                MEETEI_MAYEK,
                HANGUL_SYLLABLES,
                HANGUL_JAMO_EXTENDED_B,
                HIGH_SURROGATES,
                HIGH_PRIVATE_USE_SURROGATES,
                LOW_SURROGATES,
                PRIVATE_USE_AREA,
                CJK_COMPATIBILITY_IDEOGRAPHS,
                ALPHABETIC_PRESENTATION_FORMS,
                ARABIC_PRESENTATION_FORMS_A,
                VARIATION_SELECTORS,
                VERTICAL_FORMS,
                COMBINING_HALF_MARKS,
                CJK_COMPATIBILITY_FORMS,
                SMALL_FORM_VARIANTS,
                ARABIC_PRESENTATION_FORMS_B,
                HALFWIDTH_AND_FULLWIDTH_FORMS,
                SPECIALS,
                LINEAR_B_SYLLABARY,
                LINEAR_B_IDEOGRAMS,
                AEGEAN_NUMBERS,
                ANCIENT_GREEK_NUMBERS,
                ANCIENT_SYMBOLS,
                PHAISTOS_DISC,
                null,
                LYCIAN,
                CARIAN,
                null,
                OLD_ITALIC,
                GOTHIC,
                null,
                UGARITIC,
                OLD_PERSIAN,
                null,
                DESERET,
                SHAVIAN,
                OSMANYA,
                null,
                CYPRIOT_SYLLABARY,
                IMPERIAL_ARAMAIC,
                null,
                PHOENICIAN,
                LYDIAN,
                null,
                MEROITIC_HIEROGLYPHS,
                MEROITIC_CURSIVE,
                KHAROSHTHI,
                OLD_SOUTH_ARABIAN,
                null,
                AVESTAN,
                INSCRIPTIONAL_PARTHIAN,
                INSCRIPTIONAL_PAHLAVI,
                null,
                OLD_TURKIC,
                null,
                RUMI_NUMERAL_SYMBOLS,
                null,
                BRAHMI,
                KAITHI,
                SORA_SOMPENG,
                CHAKMA,
                null,
                SHARADA,
                null,
                TAKRI,
                null,
                CUNEIFORM,
                CUNEIFORM_NUMBERS_AND_PUNCTUATION,
                null,
                EGYPTIAN_HIEROGLYPHS,
                null,
                BAMUM_SUPPLEMENT,
                null,
                MIAO,
                null,
                KANA_SUPPLEMENT,
                null,
                BYZANTINE_MUSICAL_SYMBOLS,
                MUSICAL_SYMBOLS,
                ANCIENT_GREEK_MUSICAL_NOTATION,
                null,
                TAI_XUAN_JING_SYMBOLS,
                COUNTING_ROD_NUMERALS,
                null,
                MATHEMATICAL_ALPHANUMERIC_SYMBOLS,
                null,
                ARABIC_MATHEMATICAL_ALPHABETIC_SYMBOLS,
                null,
                MAHJONG_TILES,
                DOMINO_TILES,
                PLAYING_CARDS,
                ENCLOSED_ALPHANUMERIC_SUPPLEMENT,
                ENCLOSED_IDEOGRAPHIC_SUPPLEMENT,
                MISCELLANEOUS_SYMBOLS_AND_PICTOGRAPHS,
                EMOTICONS,
                null,
                TRANSPORT_AND_MAP_SYMBOLS,
                ALCHEMICAL_SYMBOLS,
                null,
                CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B,
                null,
                CJK_UNIFIED_IDEOGRAPHS_EXTENSION_C,
                CJK_UNIFIED_IDEOGRAPHS_EXTENSION_D,
                null,
                CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT,
                null,
                TAGS,
                null,
                VARIATION_SELECTORS_SUPPLEMENT,
                null,
                SUPPLEMENTARY_PRIVATE_USE_AREA_A,
                SUPPLEMENTARY_PRIVATE_USE_AREA_B
        };


        /**
         * 返回包含指定char的Unicode块,
         * 不过这个方法不能处理增补characters。如果要处理增补的药直接调用of方法。
         */
        public static Character.UnicodeBlock of(char c) {
            return of((int) c);
        }

        /**
         * 返回包含指定char的Unicode块
         *
         * @since 1.5
         */
        public static Character.UnicodeBlock of(int codePoint) {
            if (!isValidCodePoint(codePoint)) {
                throw new IllegalArgumentException();
            }

            int top, bottom, current;
            bottom = 0;
            top = blockStarts.length;
            current = top / 2;

            // 二分查找
            // invariant: top > current >= bottom && codePoint >= unicodeBlockStarts[bottom]
            while (top - bottom > 1) {
                if (codePoint >= blockStarts[current]) {
                    bottom = current;
                } else {
                    top = current;
                }
                current = (top + bottom) / 2;
            }
            return blocks[current];
        }

        /**
         * 通过给定的标识符返回unicode块
         *
         * @since 1.5
         */
        public static final Character.UnicodeBlock forName(String blockName) {
            Character.UnicodeBlock block = map.get(blockName.toUpperCase(Locale.US));
            if (block == null) {
                throw new IllegalArgumentException();
            }
            return block;
        }
    }
}

你可能感兴趣的:(Java源码浅析,Character(2))