zoukankan      html  css  js  c++  java
  • Character.digit()的意义

    最近在阅读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()啦_

          </div>
    

    原文地址:https://www.jianshu.com/p/21cdfd445007

  • 相关阅读:
    Certificate、Provisioning Profile、App ID
    boundingRectWithSize
    IOS照片框架
    UIlabel 属性text
    UIMenuController的使用,对UILabel拷贝以及定制菜单
    iOS 自定义emoji表情键盘
    IOS第三方字体
    IOS 验证码
    网上收集的以及自己总结的iOS开发技巧
    给自己一个坚持下去的理由
  • 原文地址:https://www.cnblogs.com/jpfss/p/11011054.html
Copyright © 2011-2022 走看看