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)
其中:
ch - the character to be converted(要转换的字符)
1.1 ch - int类型,是字符的ASCII码,数字的ASCII码是48-57radix - 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
测试:
- 数字字符情况:
public static void main(String[] args) {
int digit = Character.digit('6', 8);
System.out.println("digit = " + digit);
}
/**result:
*digit = 6
*/
- 数字字符越界情况:
public static void main(String[] args) {
int digit = Character.digit('6', 2);
System.out.println("digit = " + digit);
}
/**result
*digit = -1
*/
- 其他字符情况:
public static void main(String[] args) {
int digit = Character.digit('d', 2);
System.out.println("digit = " + digit);
}
/**
*digit = -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>
Character.digit()的意义的更多相关文章
- 【Linux】linux/unix下telnet提示Escape character is '^]'的意义
在linux/unix下使用telnet hostname port连接上主机后会提示Escape character is '^]' 这个提示的意思是按Ctrl + ] 会呼出telnet的命令行, ...
- 【Linux】使用 telnet 提示 Escape character is '^]'的意义
在linux/unix下使用telnet hostname port连接上主机后会提示Escape character is '^]' 这个提示的意思是按Ctrl + ] 会呼出telnet的命令行, ...
- linux/unix下telnet提示Escape character is '^]'的意义
在linux/unix下使用telnet hostname port连接上主机后会提示Escape character is '^]' 这个提示的意思是按Ctrl + ] 会呼出telnet的命令行, ...
- java 考试试题
Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io 的语法,虚拟机方面的语法,其他.有些题来自网上搜集整理,有些题来自学员 ...
- java Integer 源码学习
转载自http://www.hollischuang.com/archives/1058 Integer 类在对象中包装了一个基本类型 int 的值.Integer 类型的对象包含一个 int 类型的 ...
- java较全的面试题
一.Java基础部分 1. JAVA的基本数据类型有哪些 ? String 是不是基本数据类型 ? 2. 一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? ...
- 201521123091 《Java程序设计》第9周学习总结
Java 第九周总结 第九周的作业. 目录 1.本章学习总结 2.Java Q&A 3.码云上代码提交记录及PTA实验总结 1.本章学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异 ...
- 201521123005 《Java程序设计》 第九周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 本次PTA作业题集异常 1.常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己 ...
- Java-Integer源码分析
除了两种浮点型,剩下的几种基本数据类型的包装类几乎都实现了常量池,有好处用数据的时候直接去拿,没有再去创建,坏处是在程序编译的时候就存入大量数据不管用不用到.下面是一篇很好的文章,很详细,转自:htt ...
随机推荐
- 【JZOJ4793】【GDOI2017模拟9.21】妮厨的愤怒
题目描述 栋栋和标标都是厨力++的妮厨.俗话说"一机房不容二厨",他们两个都加入了某OI( )交流♂( )群,在钦定老婆的时候出现了偏差,于是闹得不可开交.可是栋栋是群内的长者,斗 ...
- oracle如何启用审计
通过数据库初始化参数文件中的AUDIT_TRAIL 初始化参数启用和禁用数据库审计. DB 启用数据库审计并引导所有审计记录到数据库的审计跟踪 OS 启用数据库审计并引导所有审计记录到操作系统的审 ...
- Leetcode824.Goat Latin山羊拉丁文
给定一个由空格分割单词的句子 S.每个单词只包含大写或小写字母. 我们要将句子转换为 "Goat Latin"(一种类似于 猪拉丁文 - Pig Latin 的虚构语言). 山羊拉 ...
- SPARK-SQL内置函数之时间日期类
转载请注明转自:http://www.cnblogs.com/feiyumo/p/8760846.html 一.获取当前时间 1.current_date获取当前日期 2018-04-09 2.cur ...
- 2019-6-23-WPF-获得当前输入法语言区域
title author date CreateTime categories WPF 获得当前输入法语言区域 lindexi 2019-06-23 11:51:21 +0800 2018-10-12 ...
- Node.js MVC模式+MongoDB实现学员管理系统
目录结构: 项目入口文件 /* Author:张波 */ /* 文件说明: 此文件是本项目的入口文件 启动这个项目,会先执行本文件中的代码 */ // 1. 引入模块 const http = req ...
- java 删除字符串左边空格和右边空格 trimLeft trimRight
/** * 去右空格 * @param str * @return */ public String trimRight(String str) { if (str == null || str.eq ...
- BUAA 169 电话费
http://oj55.bianchengla.com/problem/169/ 还有这个,不怎么好做,最后用栈做出来了. 感觉比较有用的一个数据是: 10 3 1010101010 代码如下: #i ...
- Where是深复制
从一个List中通过Where过滤出来的子List或Fist出来的单独元素,与原List是深复制关系.也就是说修改子list,或单独元素,并不会影响原List中的对象. 如:Geom g = Geom ...
- Hadoop应用程序示例