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
相关产品推荐
相关产品推荐

