Java数字位数统计方法异常求助:前置零导致计数错误
问题分析与解决方案
你的问题根源出在Java的int类型无法保留前导零,而且数字开头带0会被Java当作八进制数解析:
- 比如你输入的
01011100,Java会把它当成八进制数,转成十进制是33856,你的方法统计的是这个数的位数(7位),不是你预期的8位; 00101111作为八进制转十进制是4431,统计出来是6位,自然和预期不符。
另外,就算你输入的是十进制的带前导零数字,int类型也会自动忽略前导零,所以用int作为参数本身就没法实现你要的“统计带前导零的数字位数”需求。
正确的实现方式
要统计带前导零的数字位数,必须用字符串作为输入参数,因为只有字符串能保留前导零信息。
实现代码
public static int countDigits(String numStr) { // 先校验输入是否为纯数字字符串 if (numStr == null || !numStr.matches("\\d+")) { throw new IllegalArgumentException("输入必须是有效的纯数字字符串"); } return numStr.length(); }
使用示例
- 调用
countDigits("01011100")会返回8; - 调用
countDigits("00101111")会返回8。
如果你的输入来源是用户输入或者文件读取的数字串,直接用字符串传递就可以完美解决问题。
内容的提问来源于stack exchange,提问作者Ahmad Aldali
相关产品推荐
相关产品推荐

