美文网首页
Character.digit()的意义

Character.digit()的意义

作者: onlyHalfSoul | 来源:发表于2018-07-19 09:54 被阅读1003次

最近在阅读Integet.parseInt()源码时,遇到了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()啦_

相关文章

  • Character.digit()的意义

    最近在阅读Integet.parseInt()源码时,遇到了Character.digit()这个方法,以前没有遇...

  • 意义的意义

    把一根根香烟树立排列起来 可以密集林立也可以高耸入云 当良知的火花在醒悟中闪现 我看到太多愚昧的灵魂在烟火上方的呻...

  • 意义的意义

    2018好像不是很适合外出。每次出去两天回来时都会发生一些事打乱我所有的平静。 昨天一天遭受了身体和心理的双重磨难...

  • “意义”的意义

    【学习记录0421】day21 王子姐姐 一、阅读收获: 001 给事情赋予重大意义 往往很多时候,去做一些需要“...

  • 意义的意义

    貌似最近两年,工作都没有很大的进展。 换了3份,但是都没有走进内心。 完成好每天的工作,但是填不满内心的空虚。 这...

  • 意义的“意义”

    记忆中曾有一段时间,我一直想知道:生活的意义是什么?人们拼命追求的一切到头来有什么意义?人活着的意义又是什么...

  • 意义的意义

    意义是因为你我生活中里的残缺而呈现的,这份缺憾,不断的通过意义的方式想象中得以延续。他本来的面目就好像一个被截肢的...

  • 意义的意义

    1 人生,寄蜉蝣于天地,渺沧海之一粟。 在天地中毫无确定性,在沧海内一切未知。 在不确定之下,人的眼光极其短视,关...

  • 意义的意义

    崔永元说,中国人是最注重意义的,几乎所有事情都追求一个意义。 但是意义到底有没有意义呢?也不尽然。很多事情做的时候...

  • 意义的意义

    20201204 爱云 今天的课程是证悟课——意义的意义。 尼采说:知道为什么而活的人,什么痛苦都能承受。所以...

网友评论

      本文标题:Character.digit()的意义

      本文链接:https://www.haomeiwen.com/subject/rvuzpftx.html