Character.isDigit()判断字符串是否全为数字需遍历每个字符,仅识别Unicode数字字符(如'0'–'9'、全角数字等),不支持负号、小数点等,空字符串返回false。

用 Character.isDigit() 判断字符串是否全为数字,核心思路是遍历每个字符,逐一检查是否都是数字字符。它只识别 Unicode 中定义的“数字字符”,比如常见的 '0'–'9',也包括一些全角数字(如'0')、罗马数字、上标数字等,但要注意它不判断负号、小数点、空格等非数字字符——这些必须额外处理。
逐个字符检查,遇到非数字就返回 false
最直接的方式是循环字符串每个 char,调用 Character.isDigit(ch)。只要有一个不是数字字符,立即返回 false;全部通过才返回 true。
- 空字符串应单独考虑:通常认为非数字,返回
false - 字符串长度为 0 时直接返回
false,避免空指针或逻辑错误 - 注意:该方法不识别 "-"、"+"、"."、"e" 等,含这些字符会直接判为 false
基础实现示例
以下是一个简洁可靠的判断方法:
public static boolean isAllDigits(String str) {
if (str == null || str.isEmpty()) {
return false;
}
for (int i = 0; i < str.length(); i++) {
if (!Character.isDigit(str.charAt(i))) {
return false;
}
}
return true;
}
测试:isAllDigits("123") → trueisAllDigits("12a3") → falseisAllDigits("123")(全角数字)→ trueisAllDigits("-123") → false(因为 '-' 不是 digit)
和其他方式对比说明
Character.isDigit() 比正则 str.matches("\d+") 更轻量,也比 Integer.parseInt() 安全(不会因溢出或非数字抛异常)。但它不等价于“能转成整数”,只是字符层面的数字判定。
立即学习“Java免费学习笔记(深入)”;
- 要支持带符号整数(如 "-123"),需先检测首字符是否为 '-' 或 '+',再检查其余字符
- 要支持小数(如 "12.34"),不能只靠
isDigit(),需拆分或改用更复杂的逻辑 - 若只需 ASCII 数字 '0'–'9',可用
ch >= '0' && ch ,性能略高且语义明确
常见误区提醒
Character.isDigit() 返回 true 的不只是 '0'–'9'。例如:
- 全角数字:'0'、'1'(Unicode U+FF10–U+FF19)→ true
- 上标数字:'⁰'、'¹'(U+2070, U+00B9 等)→ true
- 某些语言数字字符(如阿拉伯-印地数字)→ true
- 但字母 'o'、'l'、汉字 '一' → false(它们不是 digit)
如果业务要求严格限定为 ASCII 数字,建议用范围判断而非 isDigit()。


















