Character.digit()的意義

官方說法是:

java.lang.Character.digit(char ch, int radix)方法:

在指定的基數返回字符ch的數值。如果基數是不在範圍內MIN_RADIX≤基數≤MAX_RADIX或如果該值的通道是不是一個有效的數字在指定的基數-1,則返回。以下是如果至少有一個字符是一個有效的數字:

  • 方法isDigit爲true的字符和Unicode字符的十進制數值(或分解的單字符)小於指定的基數。在這種情況下的十進制數字值被返回。

  • 該字符是一個大寫拉丁字母'A'到'Z'和它的代碼是小於基數+'A' - 10。在這種情況下,ch - 'A'+10返回。

  • 字符的小寫拉丁字母'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返回。

以下是java.lang.Character.digit()方法的聲明

public static int digit(char ch, int radix)
public static int digit(int ch, int radix)

其中:

  1. ch - the character to be converted(要轉換的字符)
    1.1 ch - int類型,是字符的ASCII碼,數字的ASCII碼是48-57

  2. radix - the radix(基數) ----也就是進制數

返回值
此方法返回由指定基數中的字符表示的數值。

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;
    }

注意這個方法只能返回數字字符的值,而且是在radix這個基數範圍內,若數字字符超過這個基數則返回 -1,若字符不是數字,也返回 -1。

通俗理解:digit()是個邊界值判斷,不過邊界返回字符數字本身數值,超過邊界即返回 -1

測試:

  1. 數字字符情況:
public static void main(String[] args) {
        int digit = Character.digit('6', 8);
        System.out.println("digit = " + digit);
    }

/**result:
*digit = 6
*/
  1. 數字字符越界情況:
public static void main(String[] args) {
        int digit = Character.digit('6', 2);
        System.out.println("digit = " + digit);
    }

/**result
*digit = -1
*/
  1. 其他字符情況:
public static void main(String[] args) {
        int digit = Character.digit('d', 2);
        System.out.println("digit = " + digit);
    }

/**
*digit = -1
*/
  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);//非數字ASCII碼
        System.out.println("digit = " + digit);
        System.out.println("digit2 = " + digit2);
        System.out.println("digit3 = " + digit3);
    }

/*result:
digit = 3
digit2 = -1
digit3 = -1
*/

基本會用了,接着去看parseInt()啦_

Integer.parseInt(str,16);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章