Character.digit()将数字字符按指定进制解析为整数,参数为码点和进制(2–36),非有效数字或超范围时返回-1;需校验结果,不适用于整串转换。

在 Java 中,Character.digit() 可用于将**表示数字的字符(如 '0'~'9'、'a'~'z' 等)按指定进制解析为对应的整数值**,但它**不直接处理“码点(int)变量”**——它接收的是 char 或 int 类型的码点值(即 Unicode code point),但需注意:该方法对非数字字符或超出进制范围的字符会返回 -1。
理解参数含义:codePoint 与 radix
Character.digit(int codePoint, int radix) 的第一个参数是字符的 Unicode 码点(例如 '5' 的码点是 53,'A' 是 65),第二个参数是目标进制(2~36)。该方法会检查该码点是否对应一个在指定进制下有效的数字字符:
- 对于
radix = 10,仅接受'0'~'9'(码点 48~57),返回 0~9; - 对于
radix = 16,接受'0'~'9'和'a'~'f'(或大写),对应 0~15; - 码点必须是合法的 Unicode 数字字符,且其数值语义在给定进制中有效,否则返回
-1。
正确传入码点:不要误传 char 值本身
若你有一个 char c = '7',可直接用 (int)c 得到码点(55),再调用 digit:
char c = '7'; int cp = (int) c; // cp == 55 int val = Character.digit(cp, 10); // val == 7 char hexChar = 'F'; int hexVal = Character.digit(hexChar, 16); // 也可直接传 char(自动拓宽为 int),返回 15
⚠️ 注意:Character.digit('F', 10) 返回 -1,因为 'F' 在十进制中不是有效数字。
立即学习“Java免费学习笔记(深入)”;
常见错误与安全用法
直接调用可能返回 -1,务必校验结果,避免逻辑错误:
- 不要假设输入一定是数字字符,尤其当来源是用户输入或字符串解析时;
- 推荐先用
Character.isDigit(int cp)或Character.digit(cp, r) != -1判断有效性; - 若需转换整个字符串(如 "123"),应使用
Integer.parseInt(s, radix),而非逐字符调用digit。
支持的字符范围示例(radix=36)
最大进制为 36,对应数字 0–9 + a–z(或 A–Z)共 36 个符号。例如:
-
Character.digit('x', 36)→ 33 -
Character.digit(90, 36)→ 35(因为码点 90 是 'Z') -
Character.digit(91, 36)→ -1(码点 91 是 '[',不在 0–9/a–z 范围内)


















