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

Java实现时间字符串转整数数组时返回值偏大48问题求解

问题原因

你遇到的数值偏大48的问题是Java中字符编码的基础特性导致的:

  • 当你直接将char类型的数字字符(比如'0'~'9')赋值给int类型变量时,Java会自动存储该字符对应的ASCII编码值,而十进制数字字符'0'的ASCII编码恰好是48,'1'对应49,以此类推,因此最终得到的数值会比数字本身的实际值大48。
  • 补充一个现有代码的潜在问题:你定义的数组长度和原字符串长度一致,遇到'h'时跳过了赋值,int数组未手动赋值的位置会保留默认初始值0,可能会干扰后续结果判断。
修复方案

基础修复(仅解决数值偏大问题)

只需要在给数组元素赋值时,将字符减去字符'0'即可得到实际数值,修改后的循环逻辑如下:

for(int CHAR = 0; CHAR < time_len; CHAR++) {
    char character = time.charAt(CHAR);
    if (character != 'h'){
        System.out.println(character);
        // 减去字符'0'的ASCII值,得到数字实际值
        t[CHAR] = character - '0';
    }
    else System.out.println("");
}

也可以用JDK提供的工具方法实现同样效果:t[CHAR] = Character.getNumericValue(character);

优化建议(针对时间转换需求)

如果你的需求是将类似"12h34"格式的时间转换为[12,34]这样的整数数组,现有逐字符存储的逻辑并不适用,建议按'h'分割字符串后再分别转换为整数,示例代码如下:

public static int[] convert(String time) {
    // 按h分割字符串,比如"12h34"分割为["12","34"]
    String[] timeParts = time.split("h");
    int[] result = new int[timeParts.length];
    for (int i = 0; i < timeParts.length; i++) {
        result[i] = Integer.parseInt(timeParts[i]);
    }
    return result;
}

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

相关产品推荐
方舟 Agent Plan

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

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