最近在閱讀Integet.parseInt()源碼時(shí)微宝,遇到了Character.digit()這個(gè)方法察藐,以前沒有遇到過籍茧,更沒使用過钞啸,這里查了資料就記錄一下逾一。
官方說法是:
java.lang.Character.digit(char ch, int radix)方法:
在指定的基數(shù)返回字符ch的數(shù)值铸本。如果基數(shù)是不在范圍內(nèi)MIN_RADIX≤基數(shù)≤MAX_RADIX或如果該值的通道是不是一個(gè)有效的數(shù)字在指定的基數(shù)-1,則返回遵堵。以下是如果至少有一個(gè)字符是一個(gè)有效的數(shù)字:
方法isDigit為true的字符和Unicode字符的十進(jìn)制數(shù)值(或分解的單字符)小于指定的基數(shù)箱玷。在這種情況下的十進(jìn)制數(shù)字值被返回。
該字符是一個(gè)大寫拉丁字母'A'到'Z'和它的代碼是小于基數(shù)+'A' - 10陌宿。在這種情況下锡足,ch - 'A'+10返回。
字符的小寫拉丁字母'a'到'z'和它的代碼小于radix+'A' - 10壳坪。在這種情況下舶得,ch - 'a'+10返回。
字符是一個(gè)全角大寫拉丁字母A('\ uFF21')到Z('\ uFF3A“)和它的代碼小于radix+'\ uFF21” - 10爽蝴。在這種情況下沐批,ch - '\ uFF21'+ 10返回。
該字符是一個(gè)小寫拉丁字母的全角('\ uFF41')到Z('\ uFF5A“)蝎亚,且它的代碼小于radix+'\ uFF41” - 10九孩。在這種情況下,ch - '\ uFF41'+10返回发框。
以下是java.lang.Character.digit()方法的聲明
public static int digit(char ch, int radix)
public static int digit(int ch, int radix)
其中:
ch - the character to be converted(要轉(zhuǎn)換的字符)
1.1 ch - int類型躺彬,是字符的ASCII碼,數(shù)字的ASCII碼是48-57radix - the radix(基數(shù)) ----也就是進(jìn)制數(shù)
返回值
此方法返回由指定基數(shù)中的字符表示的數(shù)值。
digit的源碼在下面:
int digit(int ch, int radix) {
int value = -1;
if (radix >= Character.MIN_RADIX && radix <= Character.MAX_RADIX) {
int val = getProperties(ch);
int kind = val & 0x1F;
if (kind == Character.DECIMAL_DIGIT_NUMBER) {
value = ch + ((val & 0x3E0) >> 5) & 0x1F;
}
else if ((val & 0xC00) == 0x00000C00) {
// Java supradecimal digit
value = (ch + ((val & 0x3E0) >> 5) & 0x1F) + 10;
}
}
return (value < radix) ? value : -1;
}
注意這個(gè)方法只能返回?cái)?shù)字字符的值宪拥,而且是在radix這個(gè)基數(shù)范圍內(nèi)仿野,若數(shù)字字符超過這個(gè)基數(shù)則返回 -1,若字符不是數(shù)字江解,也返回 -1设预。
通俗理解:digit()是個(gè)邊界值判斷,不過邊界返回字符數(shù)字本身數(shù)值犁河,超過邊界即返回 -1
測試:
- 數(shù)字字符情況:
public static void main(String[] args) {
int digit = Character.digit('6', 8);
System.out.println("digit = " + digit);
}
/**result:
*digit = 6
*/
- 數(shù)字字符越界情況:
public static void main(String[] args) {
int digit = Character.digit('6', 2);
System.out.println("digit = " + digit);
}
/**result
*digit = -1
*/
- 其他字符情況:
public static void main(String[] args) {
int digit = Character.digit('d', 2);
System.out.println("digit = " + digit);
}
/**
*digit = -1
*/
- ASCII碼情況
public static void main(String[] args) {
int digit = Character.digit(51, 6);//正常
int digit2 = Character.digit(50,2);//越界
int digit3 = Character.digit(47,2);//非數(shù)字ASCII碼
System.out.println("digit = " + digit);
System.out.println("digit2 = " + digit2);
System.out.println("digit3 = " + digit3);
}
/*result:
digit = 3
digit2 = -1
digit3 = -1
*/
基本會用了鳖枕,接著去看parseInt()啦_