You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Character.isDigit返回值是什么?仅用它判断数字字符是否足够

结论

仅靠Character.isDigit(peek)做判断根本满足不了这段数字解析代码的需求,甚至原代码里额外加的两个判断条件都是没用的冗余逻辑。

Character.isDigit() 的返回值规则

别被方法名骗了,这个方法不是只认半角0-9,它是按照Unicode字符分类规则做判定的:只要字符属于「十进制数字」类别,就返回true。

  • 确实会返回true的包含我们常用的半角0-9(对应Unicode编码U+0030~U+0039),但除此之外全角0-9、阿拉伯-印度数字、天城文数字、泰文数字等几十种其他语言的数字字符,调用这个方法同样会返回true
  • 字母、下划线、标点、空白符、特殊符号,还有罗马数字这类不用于十进制计数的数序符号,都会返回false

这段代码的问题说明

  • 原代码写的两个额外判断纯多余:所有能被isDigit()判定为数字的字符,本身就不可能是字母,也不可能是下划线,加这两个条件起不到任何过滤作用
  • 核心问题是会算错值:如果读到非ASCII的数字字符,比如全角的9,代码里(int) peek - 48的逻辑根本拿不到正确的数值——全角0的编码是65296,减48算出来是65248,累加出来的sum完全是错的
  • 如果需求就是解析半角阿拉伯数字拼接整数,别用isDigit(),直接判断字符范围就好,代码可读性也更强:
while(peek >= '0' && peek <= '9') {
    int n = peek - '0'; // 用'0'代替硬编码48,后续维护的人一眼能懂逻辑
    sum = sum * 10 + n;
    readch(br);
}

内容的提问来源于stack exchange,提问作者ramaswag

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 04:27:23