java.lang.Character.digit(char ch, int radix)方法 :
在指定的基数返回字符ch的数值,如果基数是不在范围内MIN_RADIX≤基数≤MAX_RADIX或如果该值的通道是不是一个有效的数字在指定的基数-1,则返回。
public final class Character implements java.io.Serializable, Comparable<Character> {
public static final int MIN_RADIX = 2;
public static final int MAX_RADIX = 36;
}
也就是说radix的赋值范围2<=radix<=36,任何这个范围外的值,返回值都为-1(这个是必要条件,下面几种情况必须建立在此条件基础上)
以下是如果至少有一个字符是一个有效的数字:
方法isDigit为true的字符和Unicode字符的十进制数值(或分解的单字符)小于指定的基数。在这种情况下的十进制数字值被返回。
参数ch为数字字符时,若参数ch小于参数radix,则返回参数ch的整数类型。否则返回-1
int digit = Character.digit('0', 2); 返回值 0
int digit2 = Character.digit('9', 36); 返回值 9
返回值范围0~9
该字符是一个大写拉丁字母'A'到'Z'和它的代码是小于基数+'A' - 10。在这种情况下,ch - 'A'+10返回。
参数ch为大写字母A~Z时(参考ASCII码表,十进制取值范围在65~90),若参数ch的十进制数小于参数(radix+55),则返回参数(ch-55)
int digit = Character.digit('A', 11); 返回值 10
int digit2 = Character.digit('Z', 36); 返回值 35
此处ch参数最小是A,所以要保证不返回-1,则参数radix必须大于10(且小于等于36),也就是,radix的取值范围11~36
结果返回值范围在10~35
剩下三种情况:
字符的小写拉丁字母'a'到'z'和它的代码小于radix+'A' - 10。在这种情况下,ch - 'a'+10返回。
字符是一个全角大写拉丁字母A('\ uFF21')到Z('\ uFF3A“)和它的代码小于radix+'\ uFF21” - 10。在这种情况下,ch - '\ uFF21'+ 10返回。
该字符是一个小写拉丁字母的全角('\ uFF41')到Z('\ uFF5A“),且它的代码小于radix+'\ uFF41” - 10。在这种情况下,ch - '\ uFF41'+10返回。
这三种情况和上面这种情况相同,结果返回值范围在10~35
还有一个方法,java.lang.Character.digit(int ch, int radix),参数ch取值为A~Z,a~z的十进制数,返回结果与字母相同
总结一下, Character.digit()在取值正确的范围下,返回值在0~35之间,返回值若是0~9之间,则参数ch必为0~9的数字字符串,返回值在10~35之间,则参数必为字母。
radix中文翻译是基数,好像部分文档里也翻译为进制,总之这个方法是把数字字符串和字母(忽略大小写)转换成0~35之间的一个数而已