源码分析,基本上都加载注解上了,如有谬误,请指正,谢谢。
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<Character> {
/**
* 常量,最小基数,主要用于数字转字符串,字符串转数字
*/
public static final int MIN_RADIX = 2;
/**
* 常量,最小基数,主要用于数字转字符串,字符串转数字
*/
public static final int MAX_RADIX = 36;
/**
* char所能代表的最小值
*/
public static final char MIN_VALUE = '\u0000';
/**
* char能代表的最大值
*/
public static final char MAX_VALUE = '\uFFFF';
/**
* Char的class对象
*/
@SuppressWarnings("unchecked")
public static final Class<Character> TYPE = (Class<Character>) Class.getPrimitiveClass("char");
/**
* Unicode规范中的常规类别“Cn”,
* 指示字符未被分配给任何 Unicode 类别
*
* @since 1.1
*/
public static final byte UNASSIGNED = 0;
/**
* Unicode规范中的常规类别“Lu”,
* 指示字符是大写字母
*
* @since 1.1
*/
public static final byte UPPERCASE_LETTER = 1;
/**
* Unicode规范中的常规类别“Ll”,
* 指示字符是小写字母
*
* @since 1.1
*/
public static final byte LOWERCASE_LETTER = 2;
/**
* Unicode规范中的常规类别“Lt”,
* 指示字符是词首字母大写字母
*
* @since 1.1
*/
public static final byte TITLECASE_LETTER = 3;
/**
* Unicode规范中的常规类别"Lm",
* 指示字符是修饰符字母,它是独立式的间距字符,指示前面字母的修改
*
* @since 1.1
*/
public static final byte MODIFIER_LETTER = 4;
/**
* Unicode规范中的常规类别"Lo",
* 指示字符是字母,但它不是大写字母、小写字母、词首字母大写或修饰符字母
*
* @since 1.1
*/
public static final byte OTHER_LETTER = 5;
/**
* Unicode规范中的常规类别"Mn",
* 指示字符是非间距字符,这指示基字符的修改
*
* @since 1.1
*/
public static final byte NON_SPACING_MARK = 6;
/**
* Unicode规范中的常规类别"Me",
* 指示字符是封闭符号,封闭符号是非间距组合字符,它环绕直到基字符(并包括基字符)的所有前面的字符
*
* @since 1.1
*/
public static final byte ENCLOSING_MARK = 7;
/**
* Unicode规范中的常规类别"Mc",
* 指示字符是间距字符,这指示基字符的修改并影响该基字符的标志符号的宽度
*
* @since 1.1
*/
public static final byte COMBINING_SPACING_MARK = 8;
/**
* Unicode规范中的常规类别"Nd",
* 指示字符是十进制数字,即在范围 0 到 9 内
*
* @since 1.1
*/
public static final byte DECIMAL_DIGIT_NUMBER = 9;
/**
* Unicode规范中的常规类别"Nl",
* 指示字符是由字母表示的数字,而不是十进制数字,例如,罗马数字 5 由字母“V”表示。
*
* @since 1.1
*/
public static final byte LETTER_NUMBER = 10;
/**
* Unicode规范中的常规类别"No",
* 指示字符是数字,但它既不是十进制数字也不是字母数字,例如分数 1/2
*
* @since 1.1
*/
public static final byte OTHER_NUMBER = 11;
/**
* Unicode规范中的常规类别"Zs",
* 指示字符是空白字符,它不具有标志符号,但不是控制或格式字符
*
* @since 1.1
*/
public static final byte SPACE_SEPARATOR = 12;
/**
* Unicode规范中的常规类别"Zl",
* 指示字符用于分隔文本各行
*
* @since 1.1
*/
public static final byte LINE_SEPARATOR = 13;
/**
* Unicode规范中的常规类别"Zp",
* 指示字符用于分隔段落
*
* @since 1.1
*/
public static final byte PARAGRAPH_SEPARATOR = 14;
/**
* Unicode规范中的常规类别"Cc",
* 指示字符是控制代码,其 Unicode 值是 U+007F,或者位于 U+0000 到 U+001F 或 U+0080 到 U+009F 范围内
*
* @since 1.1
*/
public static final byte CONTROL = 15;
/**
* Unicode规范中的常规类别"Cf",
* 指示字符是格式字符,格式字符是通常不呈现的字符,但它影响文本布局或文本处理操作
*
* @since 1.1
*/
public static final byte FORMAT = 16;
/**
* Unicode规范中的常规类别"Co",
* 指示字符是专用字符,其 Unicode 值在范围 U+E000 到 U+F8FF 内
*
* @since 1.1
*/
public static final byte PRIVATE_USE = 18;
/**
* Unicode规范中的常规类别"Cs",
* 这个主要用于增补码的。
* 指示字符是高代理项还是低代理项。代理项代码值在范围 U+D800 到 U+DFFF 内
*
* @since 1.1
*/
public static final byte SURROGATE = 19;
/**
* Unicode规范中的常规类别"Pd",
* 指示字符是短划线或连字符
*
* @since 1.1
*/
public static final byte DASH_PUNCTUATION = 20;
/**
* Unicode规范中的常规类别"Ps",
* 指示字符是成对的标点符号(例如括号、方括号和大括号)之一的开始字符
*
* @since 1.1
*/
public static final byte START_PUNCTUATION = 21;
/**
* Unicode规范中的常规类别"Pe",
* 指示字符是成对的标点符号(例如括号、方括号和大括号)之一的封闭字符
*
* @since 1.1
*/
public static final byte END_PUNCTUATION = 22;
/**
* Unicode规范中的常规类别"Pc",
* 指示字符是连接两个字符的连接符标点
*
* @since 1.1
*/
public static final byte CONNECTOR_PUNCTUATION = 23;
/**
* Unicode规范中的常规类别"Po",
* 指示字符是标点,但它不是连接符标点、短划线标点、开始标点、结束标点、前引号标点或后引号标点
*
* @since 1.1
*/
public static final byte OTHER_PUNCTUATION = 24;
/**
* Unicode规范中的常规类别"Sm",
* 指示字符是数学符号,例如“+”或“=”
*
* @since 1.1
*/
public static final byte MATH_SYMBOL = 25;
/**
* Unicode规范中的常规类别"Sc",
* 指示字符是货币符号,例如“$”
*
* @since 1.1
*/
public static final byte CURRENCY_SYMBOL = 26;
/**
* Unicode规范中的常规类别"Sk",
* 指示字符是修饰符符号,这指示环绕字符的修改。例如,分数斜线号指示其左侧的数字为分子,右侧的数字为分母
*
* @since 1.1
*/
public static final byte MODIFIER_SYMBOL = 27;
/**
* Unicode规范中的常规类别"So",
* 指示字符是符号,但它不是数学符号、货币符号或修饰符符号
*
* @since 1.1
*/
public static final byte OTHER_SYMBOL = 28;
/**
* Unicode规范中的常规类别"Pi",
* 指示字符是开始或前引号
*
* @since 1.4
*/
public static final byte INITIAL_QUOTE_PUNCTUATION = 29;
/**
* Unicode规范中的常规类别"Pf",
* 指示字符是封闭或后引号
*
* @since 1.4
*/
public static final byte FINAL_QUOTE_PUNCTUATION = 30;
/**
* 错误标志,使用int(代码点)以避免与U + FFFF混淆。
* 任何文字在Unicode中都对应一个值, 这个值称为代码点,代码点的值通常写成 U+ABCD 的格式
* 具体的内容可以查看:http://ping235.blog.163.com/blog/static/44476138201042711333577/
*/
static final int ERROR = 0xFFFFFFFF;
/**
* 未定义的双向字符类型. 未定义的char值在Unicode规范中具有未定义的方向性
*
* @since 1.4
*/
public static final byte DIRECTIONALITY_UNDEFINED = -1;
/**
* Unicode规范中的强双向字符类型"L",
* LRM,大多数字母,音节,汉字表意文字,非欧洲或非阿拉伯数字,......
*
* @since 1.4
*/
public static final byte DIRECTIONALITY_LEFT_TO_RIGHT = 0;
/**
* Unicode规范中的强双向字符类型"R"
* RLM,希伯来语字母和相关的标点符号
*
* @since 1.4
*/
public static final byte DIRECTIONALITY_RIGHT_TO_LEFT = 1;
/**
* Unicode规范中的强双向字符类型"AL"
* ALM,阿拉伯语,Thaana和叙利亚语字母表,大多数特定于这些脚本的标点符号,......
*
* @since 1.4
*/
public static final byte DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC = 2;
/**
* Unicode规范中的弱双向字符类型"EN"
* 欧洲数字,东部阿拉伯语 - 印度数字,......
*
* @since 1.4
*/
public static final byte DIRECTIONALITY_EUROPEAN_NUMBER = 3;
/**
* Unicode规范中的弱双向字符类型"ES"
* 加号,减号
*
* @since 1.4
*/
public static final byte DIRECTIONALITY_EUROPEAN_NUMBER_SEPARATOR = 4;
/**
* Unicode规范中的弱双向字符类型"ET"
* DEGREE SIGN,货币符号,......
*
* @since 1.4
*/
public static final byte DIRECTIONALITY_EUROPEAN_NUMBER_TERMINATOR = 5;
/**
* Unicode规范中的弱双向字符类型"AN"
* 阿拉伯语 - 印度数字,阿拉伯小数和千位分隔符,......
*
* @since 1.4
*/
public static final byte DIRECTIONALITY_ARABIC_NUMBER = 6;
/**
* Unicode规范中的弱双向字符类型"CS"
* 冒号, 段落, FULL STOP, NO-BREAK SPACE, ...
*
* @since 1.4
*/
public static final byte DIRECTIONALITY_COMMON_NUMBER_SEPARATOR = 7;
/**
* Unicode规范中的弱双向字符类型"NSM"
* 具有General_Category值的字符:Mn(Nonspacing_Mark)和Me(Enclosing_Mark)
*
* @since 1.4
*/
public static final byte DIRECTIONALITY_NONSPACING_MARK = 8;
/**
* Unicode规范中的弱双向字符类型"BN"
* 默认的可忽略,非字符和控制字符,除了明确给出其他类型的字符。
*
* @since 1.4
*/
public static final byte DIRECTIONALITY_BOUNDARY_NEUTRAL = 9;
/**
* Unicode规范中的中性双向字符类型"B"
* PARAGRAPH SEPARATOR,适当的换行符函数,更高级别的协议段落确定
*
* @since 1.4
*/
public static final byte DIRECTIONALITY_PARAGRAPH_SEPARATOR = 10;
/**
* Unicode规范中的中性双向字符类型"S"
* Tab,制表符
*
* @since 1.4
*/
public static final byte DIRECTIONALITY_SEGMENT_SEPARATOR = 11;
/**
* Unicode规范中的中性双向字符类型"WS"
* 空格,FIGURE SPACE,行分隔符,FORM FEED,通用标点空格,......
*
* @since 1.4
*/
public static final byte DIRECTIONALITY_WHITESPACE = 12;
/**
* Unicode规范中的中性双向字符类型"ON"
* 所有其他字符,包括OBJECT REPLACEMENT CHARACTER
*
* @since 1.4
*/
public static final byte DIRECTIONALITY_OTHER_NEUTRALS = 13;
/**
* Unicode规范中的强双向字符类型"LRE"
* 将文本视为从左到右嵌入
*
* @since 1.4
*/
public static final byte DIRECTIONALITY_LEFT_TO_RIGHT_EMBEDDING = 14;
/**
* Unicode规范中的强双向字符类型"LRO"
* 强制将后续字符视为强大的从左到右字符
*/
public static final byte DIRECTIONALITY_LEFT_TO_RIGHT_OVERRIDE = 15;
/**
* Unicode规范中的强双向字符类型"RLE"
* 将文本视为从右到左嵌入
*/
public static final byte DIRECTIONALITY_RIGHT_TO_LEFT_EMBEDDING = 16;
/**
* Unicode规范中的强双向字符类型"RLO"
* 强制将后续字符视为强大的从右到左的字符
*/
public static final byte DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE = 17;
/**
* Unicode规范中的弱双向字符类型"PDF"
* 结束最后一个LRE,RLE,RLO或LRO的范围。
*/
public static final byte DIRECTIONALITY_POP_DIRECTIONAL_FORMAT = 18;
/**
* UTF-16的高位表示法,代表的最小char
*/
public static final char MIN_HIGH_SURROGATE = '\uD800';
/**
* UTF-16的高位表示法,代表的最大char
*/
public static final char MAX_HIGH_SURROGATE = '\uDBFF';
/**
* UTF-16的低位表示法,代表的最小char
*
* @since 1.5
*/
public static final char MIN_LOW_SURROGATE = '\uDC00';
/**
* UTF-16的低位表示法,代表的最大char
*
* @since 1.5
*/
public static final char MAX_LOW_SURROGATE = '\uDFFF';
/**
* UTF-16编码增补码表示法的最小char(其实就是把地位和高位算法取最小)
*
* @since 1.5
*/
public static final char MIN_SURROGATE = MIN_HIGH_SURROGATE;
/**
* UTF-16编码增补码表示法的最大char(其实就是把地位和高位算法取最大)
*
* @since 1.5
*/
public static final char MAX_SURROGATE = MAX_LOW_SURROGATE;
/**
* 最小的增补代码点
* Unicode最初设计是作为一种固定宽度的16位字符编码。
* 在Java编程语言中,基本数据类型char初衷是通过提供一种简单的、能够包含任何字符的数据类型来充分利用这种设计的优点。
* 不过,现在看来,16位编码的所有65 536个字符并不能完全表示全世界所有正在使用或曾经使用的字符。
* 于是,Unicode标准已扩展到包含多达1 112 064个字符。那些超出原来的16位限制的字符被称作增补字符。
* 具体查看:https://www.cnblogs.com/vinozly/p/5155304.html
*
* @since 1.5
*/
public static final int MIN_SUPPLEMENTARY_CODE_POINT = 0x010000;
/**
* 最小代码点
*
* @since 1.5
*/
public static final int MIN_CODE_POINT = 0x000000;
/**
* 最大代码点
*
* @since 1.5
*/
public static final int MAX_CODE_POINT = 0X10FFFF;
/**
* 此类的实例表示Unicode字符集的特定子集
* Character类中定义的唯一子集族是UnicodeBlock。Java API的其他部分可以为其自身目的定义其他子集
*
* @since 1.2
*/
public static class Subset {
private String name;
/**
* 创建实例
*/
protected Subset(String name) {
if (name == null) {
throw new NullPointerException("name");
}
this.name = name;
}
/**
* equals
*/
public final boolean equals(Object obj) {
return (this == obj);
}
/**
* hashCode
*/
public final int hashCode() {
return super.hashCode();
}
/**
* 返回name
*/
public final String toString() {
return name;
}
}
}
网友评论