解决问题:java.lang.NumberFormatException: For input string: ""

本文探讨了前端向后台传递空字符串时导致的NumberFormatException异常。通过检查参数是否为空,避免了Integer.parseInt和Long.parseLong方法在空字符串上的调用,有效解决了异常问题。

最近写的一个项目,需要往后台传值,参数有可能是是空值,前端定义的,

var String = '';

$("").onclick(function(){
>>>>>>>              //赋值区域省略
})

location.href = "${pageContext.request.contextPath}/admin?str="+String;

如上代码,中间赋值过程就不写了,然后传到后台就变成了空值


obj.setAge(Long.parseLong(request.getParameter("str")));

当程序运行到该句的时候,控制台报错:

java.lang.NumberFormatException: For input string: ""

原因是:在调用StringUtils.split(),Integer.parseInt(),Long.parseLong()等方法时,不管传入的参数的值是什么,都能进入不为null或“”的判断中,然后就运行执行下面的代码,就可能出现 java.lang.NumberFormatException: For input string: "null"的异常。

当传入的值为空,就不能被StringUtils.split()切割,也不能被Integer.parseInt(),Long.parseLong()等方法调用,所以会报错。

解决方法:

String StrAge = request.getParameter("str");
if (StrAge != null && !StrAge .equals("")){
	obj.setAge(Long.parseLong(StrAge));
}

这样就可以解决上面的问题了。

### java.lang.NumberFormatException 异常原因 `java.lang.NumberFormatException` 是 Java 中常见的运行时异常之一。当尝试将不符合预期格式的字符串转换为数值类型时会抛出此异常[^1]。 例如,在使用 `Integer.parseInt(String s)` 方法解析整数时,如果输入的字符串不是有效的十进制表示形式,则会触发该异常。同样地,其他数值类型的解析方法也会因类似的非法输入而引发相同的问题[^2]。 ```java // 这是一个典型的 NumberFormatException 场景 String invalidNumber = "abc"; int number = Integer.parseInt(invalidNumber); // 将抛出 NumberFormatException ``` ### 解决方案与最佳实践 为了有效预防并处理此类异常,建议采取以下措施: #### 1. 验证输入合法性 在执行任何可能引起异常的操作之前,先验证输入数据的有效性。可以利用正则表达式或其他方式来确认待转换字符串确实代表合法数字[^3]。 ```java public static boolean isValidInt(String str) { try { Integer.parseInt(str); return true; } catch (NumberFormatException e) { return false; } } ``` #### 2. 使用条件判断代替直接转换 通过提前检查字符串的内容结构,可以在不实际调用转换函数的情况下排除明显错误的情况。对于简单的场景来说非常有用[^4]。 ```java if (!str.matches("-?\\d+(\\.\\d+)?")) { System.out.println("Invalid input!"); } else { double num = Double.parseDouble(str); } ``` #### 3. 应用默认值或范围限制 设定合理的默认值作为备用选项;也可以规定允许的最大最小边界,超出这些边界的输入都将被拒绝接受[^5]。 ```java private static final int DEFAULT_VALUE = 0; public static int parseOrDefault(String value, int defaultValue) { try { return Integer.valueOf(value.trim()); } catch (Exception ex) { return defaultValue; } } ```
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值