标签:ack 定义 了解 example represent 构造方法 包装 basic type
Character类是一个包装类。
char这种数据类型是基于原始的Unicode编码的,储存一个char用16个bit,因此定义characters也是16位定长的实体集合。Unicode编码标准发生了变化,数量级从\uFFFF到了\u10FFFF
对Unicode标准中的所有字符,16位已经是不够的了,即一部分字符并不能通过char来表示了。
而称码点(code point)大于\uFFFF的字符集合为supplementary characters(补充字符)。
为了解决补充字符表示的问题,首先想到的是基本数据类型int,一个int对象占了32bit,肯定可以表达所有的字符。
但是表示基本字符,只需要16位就够了,表示一个补充字符,也只需要21位,高位的11位都为0,很浪费空间呐!
这个时候可以考虑使用到Character这个包装类了
允许一个Character的对象包装一个或者两个基本类型为char的值,补充字符就拥有了两个基本类型为char的值。
其中,高位的char的取值范围是\uD800--\uDBFF(4*16*16种),低位的char的取值范围是\uDC00--\uDFFF(4*16*16种)。
4*16*16*4*16*16==0x10*16*16*16*16,可以完整表达所有补充字符。
Character有两种构造方法,它接受不同的参数类型。
一种是char,这样自然不能实现补充字符的构造Character
另一种就是int,一个int的范围是0x00000000-0xFFFFFFFF,可以拿任意一个字符的Unicode编码值来作为参数
首先基数radix必须满足在开区间[Character.MIN_RADIX ,Character.MAX_RADIX ]之内,否则直接返回-1;
Character.MIN_RADIX = 2;Character.MAX_RADIX = 36,为什么是2和36呢?
然后ch(ch会被默认转化成Character)也必须是有效的,ch怎样才算有效呢?分以下几种情况:
数字可以有很多,‘0’--‘9’:1.isDigit(ch)==true,也就是new Character(ch).getType(ch)==DECIMAL_DIGIT_NUMBER,也就是可能是一个数字。
‘\u0030‘ through ‘\u0039‘, ISO-LATIN-1 digits (‘0‘ through ‘9‘)‘\u0660‘ through ‘\u0669‘, Arabic-Indic digits‘\u06F0‘ through ‘\u06F9‘, Extended Arabic-Indic digits‘\u0966‘ through ‘\u096F‘, Devanagari digits‘\uFF10‘ through ‘\uFF19‘, Fullwidth digits
但是同时对应的那个数字不能大于或者等于radix,如果大于或者等于了radix还是返回-1,否则将数字返回2.ch是大写字母‘A‘(‘\u65‘)--‘Z‘(‘\u90‘)或者小写字母‘a‘(‘\u97‘)--‘z‘(‘\u122‘)中的一个时,A/a对应是10,依次下去Z/z对应的就是35.
3.ch是全宽大写字母‘A‘(‘\uFF21‘)--‘Z‘(‘\uFF3A‘)或者全宽小写字母‘a‘(‘\uFF41‘)--‘z‘(‘\uFF5A‘)中的一个时,A/a对应是10,依次下去Z/z对应的就是35.
但是同时对应的那个数字不能大于或者等于radix,如果大于或者等于了radix还是返回-1,否则将数字返回
public static int digit(int codePoint,int radix)本质上是一样的,只是char现在已经不能表示所有的字符了,
有些补充字符只用字符的Unicode编码值,用一个int来表示了,所以对应也用用一个int表示一个字符来传参的方法
digit(‘A‘,16)和digit(65,16)的结果是一样的。(int)‘A‘==65
首先基数radix有效(即在开区间[2,36]内)
然后digit要有效,即0<=digit<radix(好像多少多少进制一样,最高36进制,最低二进制)
0-9分别对应的‘0‘-‘9‘,10-35分别对应的小写的‘a‘-‘z‘
只有当radix和digit同时有效的时候才返回字符,否则返回‘\u0000‘空字符
Returns the int value that the specified Unicode character represents.
返回指定的Unicode字符表示的int值。
For example, the character ‘\u216C‘ (the roman numeral fifty) will return an int with a value of 50.
例如,字符‘\ u216C‘(罗马数字50)将返回一个int 值50。
字符‘0‘-‘9‘就返回0-9
字符不管是‘A‘(‘\u65‘)--‘Z‘(‘\u90‘),‘a‘(‘\u97‘)--‘z‘(‘\u122‘),还是‘A‘(‘\uFF21‘)--‘Z‘(‘\uFF3A‘),‘a‘(‘\uFF41‘)--‘z‘(‘\uFF5A‘)
都对应返回的是10-35
public static int getNumericValue(int codePoint)就是对应的用一个int表示一个字符来传参的方法
关于Character的digit,forDigit,getNumericValue方法的一点理解
标签:ack 定义 了解 example represent 构造方法 包装 basic type
原文地址:https://www.cnblogs.com/jpfss/p/11011035.html