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

  • 相关阅读:
    DIY 作品 及 维修 不定时更新
    置顶,博客中所有源码 github
    openwrt PandoraBox PBR-M1 极路由4 HC5962 更新固件
    使用 squid 共享 虚拟专用网至局域网
    第一次参加日语能力测试 N5
    libx264 libfdk_aac 编码 解码 详解
    开发RTSP 直播软件 H264 AAC 编码 live555 ffmpeg
    MFC Camera 摄像头预览 拍照
    http2 技术整理 nginx 搭建 http2 wireshark 抓包分析 server push 服务端推送
    plist 图集 php 批量提取 PS 一个个切
  • 原文地址:https://www.cnblogs.com/jpfss/p/11011054.html
Copyright © 2011-2022 走看看