java.lang.NumberFormatException: Invalid double: ""

今天同事出一个bug,看了下是Gson解析异常的问题 数字格式化异常, 意思是后台返回的数据无法转换为你定义的数据类型!
他定义的是int类型,后台返回的是 “”
原理:
Gson对数字都是当做double来解析的,所以后台返回的数据若无法转换为你定义的数据类型,就会报Invalid double: … 的错误!
解决:
让后台将需要转换为数字的数据默认为 0!

### Java中 `NumberFormatException` 异常处理 当尝试解析字符串为数值类型时,如果输入不符合预期格式,则会抛出 `java.lang.NumberFormatException`。特别是对于带有多个小数点的情况,该异常会被触发[^1]。 #### 错误原因分析 此异常通常发生在使用 `Double.parseDouble()` 或其他类似的静态方法来转换字符串到数字对象的过程中。具体来说,在解析过程中遇到了不合法字符——即超过一个小数点的存在会导致解析失败并抛出异常[^2]。 ```java String invalidNumber = "123.456.789"; double value = Double.parseDouble(invalidNumber); // 这里将会抛出 NumberFormatException ``` 为了防止此类错误发生,可以采取以下措施: #### 验证输入合法性 在执行任何类型的数值转换之前,应该先验证给定字符串是否符合有效的浮点数表示形式。可以通过正则表达式来进行初步筛选[^3]。 ```java public static boolean isValidFloat(String str) { String floatPattern = "^[-+]?[0-9]*\\.?[0-9]+$"; // 正则匹配规则 return str.matches(floatPattern); } ``` #### 使用自定义解析逻辑 为了避免默认实现中的严格限制,可以选择构建更灵活的解析器。例如,允许存在逗号作为千位分隔符,并只保留最后一个有效的小数点位置。 ```java public class CustomParser { public static double parseCustomFloat(String input) throws ParseException { StringBuilder cleanInput = new StringBuilder(); int dotCount = 0; for (char c : input.toCharArray()) { if (c == '.') { dotCount++; continue; } cleanInput.append(c); } if (dotCount > 1) throw new ParseException("Invalid number format", 0); try { return Double.parseDouble(cleanInput.toString().replace(',', '.')); } catch (NumberFormatException e) { throw new ParseException(e.getMessage(), 0); } } } ``` 通过上述方式可以在一定程度上减少因多处小数点而导致的 `NumberFormatException` 发生概率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值