Character.digit()的意義

最近在閱讀Integet.parseInt()源碼時(shí),遇到了Character.digit()這個(gè)方法,以前沒(méi)有遇到過(guò),更沒(méi)使用過(guò),這里查了資料就記錄一下。

官方說(shuō)法是:

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è)大寫(xiě)拉丁字母'A'到'Z'和它的代碼是小于基數(shù)+'A' - 10。在這種情況下,ch - 'A'+10返回。

  • 字符的小寫(xiě)拉丁字母'a'到'z'和它的代碼小于radix+'A' - 10。在這種情況下,ch - 'a'+10返回。

  • 字符是一個(gè)全角大寫(xiě)拉丁字母A('\ uFF21')到Z('\ uFF3A“)和它的代碼小于radix+'\ uFF21” - 10。在這種情況下,ch - '\ uFF21'+ 10返回。

  • 該字符是一個(gè)小寫(xiě)拉丁字母的全角('\ 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(要轉(zhuǎn)換的字符)
    1.1 ch - int類(lèi)型,是字符的ASCII碼,數(shù)字的ASCII碼是48-57

  2. radix - 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ù)字字符超過(guò)這個(gè)基數(shù)則返回 -1,若字符不是數(shù)字,也返回 -1。

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

測(cè)試:

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

/**result:
*digit = 6
*/
  1. 數(shù)字字符越界情況:
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);//非數(shù)字ASCII碼
        System.out.println("digit = " + digit);
        System.out.println("digit2 = " + digit2);
        System.out.println("digit3 = " + digit3);
    }

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

基本會(huì)用了,接著去看parseInt()啦_

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 最先接觸編程的知識(shí)是在大學(xué)里面,大學(xué)里面學(xué)了一些基礎(chǔ)的知識(shí),c語(yǔ)言,java語(yǔ)言,單片機(jī)的匯編語(yǔ)言等;大學(xué)畢...
    oceanfive閱讀 3,403評(píng)論 0 7
  • (一) java基礎(chǔ)面試知識(shí)點(diǎn) 1.java中==和equals和hashCode的區(qū)別 答:首先回答的是三個(gè)定義...
    一生有你_b4f6閱讀 653評(píng)論 1 1
  • 一、Java 簡(jiǎn)介 Java是由Sun Microsystems公司于1995年5月推出的Java面向?qū)ο蟪绦蛟O(shè)計(jì)...
    子非魚(yú)_t_閱讀 4,648評(píng)論 1 44
  • 愛(ài)該怎么說(shuō)出口 翻了我們的相冊(cè),每一張照片都有一個(gè)小故事,回想下來(lái)快樂(lè)的時(shí)光還是很多的 很幸運(yùn)能夠認(rèn)識(shí)你,梅寶 茫...
    弼馬溫老濕閱讀 273評(píng)論 0 0
  • 我和一只野狗擦身而過(guò)牠一臉恐慌卻拼命搖尾巴肚皮就象小時(shí)候打摺的棉被渾濁的眼珠子分不清誰(shuí)想給牠愛(ài)誰(shuí)又想吃了牠 那個(gè)風(fēng)...
    紅塵久客閱讀 404評(píng)論 1 10

友情鏈接更多精彩內(nèi)容