Java 检查输入是否为空
如果输入不是数字,我发现这行代码出错Java 检查输入是否为空,java,Java,如果输入不是数字,我发现这行代码出错 int sum = Integer.parseInt(request.getParameter("sum")); 错误消息是 type Exception report message descriptionThe server encountered an internal error () that prevented it from fulfilling this request. exception org.apache.jasper.Ja
int sum = Integer.parseInt(request.getParameter("sum"));
错误消息是
type Exception report
message
descriptionThe server encountered an internal error () that prevented it from fulfilling this request.
exception
org.apache.jasper.JasperException: java.lang.NumberFormatException: For input string: "a"
root cause
java.lang.NumberFormatException: For input string: "a"
如果输入是字符串或null,如何处理输入
谢谢捕获异常并相应地处理它:
int sum;
try {
sum = Integer.parseInt(request.getParameter("sum"));
}
catch {
//do something if invalid sum
}
只需捕获异常并相应地处理它:
int sum;
try {
sum = Integer.parseInt(request.getParameter("sum"));
}
catch {
//do something if invalid sum
}
这实际上取决于如果总和不是一个数字,应该怎么做
try{
int sum = Integer.parseInt(request.getParameter("sum"));
}
catch(Exception e)
{
//how do you want to handle it? like ask the user to re-enter the values
}
这实际上取决于如果总和不是一个数字,应该怎么做
try{
int sum = Integer.parseInt(request.getParameter("sum"));
}
catch(Exception e)
{
//how do you want to handle it? like ask the user to re-enter the values
}
尝试:
尝试:
try {
sum = Integer.parseInt(request.getParameter("sum"));
} catch (NumberFormatException e) {
... // handle if the string isn't a number
} catch (NullPointerException e) {
... // handle if it's null
}
try {
sum = Integer.parseInt(request.getParameter("sum"));
} catch (NumberFormatException e) {
... // handle if the string isn't a number
} catch (NullPointerException e) {
... // handle if it's null
}
您应该首先确保请求参数不为null,并且仅包含数字,方法是:
if (request.getParameter("sum") != null &&
request.getParameter("sum").matches("^\\d+$"))
int sum = Integer.parseInt(request.getParameter("sum"));
您应该首先确保请求参数不为null,并且仅包含数字,方法是:
if (request.getParameter("sum") != null &&
request.getParameter("sum").matches("^\\d+$"))
int sum = Integer.parseInt(request.getParameter("sum"));
在使用Intefer.parseInt之前检查null,还可以检查输入是否包含除数值以外的内容在使用Intefer.parseInt之前检查null,还可以检查输入是否包含除数值以外的内容以下是一种不涉及引发和捕获异常的不同方法:
String input = request.getParameter("sum");
// Validate the input using regex
if (input == null || !input.matches("^-?\\d{1,8}$")) {
// handle bad input, eg throw exception or whatever you like
}
int sum = Integer.parseInt(input);
注意,这个正则表达式不允许数字太大,并且允许负数。这里有一种不同的方法,不涉及抛出和捕获异常:
String input = request.getParameter("sum");
// Validate the input using regex
if (input == null || !input.matches("^-?\\d{1,8}$")) {
// handle bad input, eg throw exception or whatever you like
}
int sum = Integer.parseInt(input);
请注意,这个正则表达式不允许数字太大,并且允许负数我看到了
org.apache.jasper.JasperException
,这意味着它在JSP中?如果要向JSP中添加这样的代码,可能需要重新考虑所做的工作。理想情况下,您应该在某种控制器中处理输入验证之类的事情,然后将结果传递给JSP模板进行呈现
有很多框架可以帮助解决这类问题,一般来说,它们都值得使用,因为您的web应用程序将受益于框架作者在安全等领域所做的所有工作
如果您只想破解,那么已经发布的六个代码答案中的几乎任何一个都会对您有用。我看到了
org.apache.jasper.JasperException
,这意味着这是一个JSP?如果要向JSP中添加这样的代码,可能需要重新考虑所做的工作。理想情况下,您应该在某种控制器中处理输入验证之类的事情,然后将结果传递给JSP模板进行呈现
有很多框架可以帮助解决这类问题,一般来说,它们都值得使用,因为您的web应用程序将受益于框架作者在安全等领域所做的所有工作
如果你只是想破解,那么已经发布的半打代码答案中几乎任何一个都会对你有用。使用
if
语句。在catch i use out.println(“请输入一个数字”);,但没有产出?为什么?使用if
语句。在catch中我使用out.println(“请输入一个数字”);,但没有产出?为什么?在catch{}中,我使用out.println(“请输入一个数字”);,但没有产出?为什么?您确定捕捉到了正确的异常吗?如果不确定将引发什么异常,请始终使用已修复问题的异常类。但是如何在异常发生后停止jsp呢?一般来说,您应该始终尝试捕获特定的异常(您也可以捕获更一般的异常)。正确的顺序可能是捕获NumberFormatException,然后是Exception,然后是Throwable。但是在这种特殊情况下,捕获NumberFormatException就足够了;,但没有产出?为什么?您确定捕捉到了正确的异常吗?如果不确定将引发什么异常,请始终使用已修复问题的异常类。但是如何在异常发生后停止jsp呢?一般来说,您应该始终尝试捕获特定的异常(您也可以捕获更一般的异常)。正确的顺序可能是捕获NumberFormatException,然后是Exception,然后是Throwable。但在这种特殊情况下,捕获NumberFormatException就足够了。+1个用于int的好正则表达式(如果对于非常大的数字有点简单)+1个用于int的好正则表达式(如果对于非常大的数字有点简单)