Character.digit()的意義

最近在閱讀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)

其中:

  1. ch - the character to be converted(要轉(zhuǎn)換的字符)
    1.1 ch - int類型躺彬,是字符的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ù)字字符超過這個(gè)基數(shù)則返回 -1,若字符不是數(shù)字江解,也返回 -1设预。

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

測試:

  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
*/

基本會用了鳖枕,接著去看parseInt()啦_

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市桨螺,隨后出現(xiàn)的幾起案子宾符,更是在濱河造成了極大的恐慌,老刑警劉巖灭翔,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件魏烫,死亡現(xiàn)場離奇詭異,居然都是意外死亡肝箱,警方通過查閱死者的電腦和手機(jī)哄褒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來煌张,“玉大人呐赡,你說我怎么就攤上這事】ト冢” “怎么了链嘀?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長档玻。 經(jīng)常有香客問我怀泊,道長,這世上最難降的妖魔是什么误趴? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任霹琼,我火速辦了婚禮,結(jié)果婚禮上凉当,老公的妹妹穿的比我還像新娘碧囊。我一直安慰自己,他們只是感情好纤怒,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布糯而。 她就那樣靜靜地躺著,像睡著了一般泊窘。 火紅的嫁衣襯著肌膚如雪熄驼。 梳的紋絲不亂的頭發(fā)上像寒,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天,我揣著相機(jī)與錄音瓜贾,去河邊找鬼诺祸。 笑死,一個(gè)胖子當(dāng)著我的面吹牛祭芦,可吹牛的內(nèi)容都是我干的筷笨。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼龟劲,長吁一口氣:“原來是場噩夢啊……” “哼胃夏!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起昌跌,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤仰禀,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后蚕愤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體答恶,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年萍诱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了悬嗓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,566評論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡裕坊,死狀恐怖包竹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情碍庵,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布悟狱,位于F島的核電站静浴,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏挤渐。R本人自食惡果不足惜苹享,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望浴麻。 院中可真熱鬧得问,春花似錦、人聲如沸软免。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽膏萧。三九已至漓骚,卻和暖如春蝌衔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蝌蹂。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工噩斟, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人孤个。 一個(gè)月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓剃允,卻偏偏與公主長得像,于是被迫代替她去往敵國和親齐鲤。 傳聞我的和親對象是個(gè)殘疾皇子斥废,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評論 2 348

推薦閱讀更多精彩內(nèi)容

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