我知道这是一个常见的问题。我已经阅读了解决方案并修改了代码,然后我也没有得到解决方案,所以我在这里发布了我的代码。
当我从文本框中读取一个值并将该值从 servlet 中的 String 解析为 int 时,为什么会显示 NumberFormatException?
String ph=request.getParameter("phone");
int phone=Integer.parseInt(ph.trim());// exception is generated here
我知道这是一个常见的问题。我已经阅读了解决方案并修改了代码,然后我也没有得到解决方案,所以我在这里发布了我的代码。
当我从文本框中读取一个值并将该值从 servlet 中的 String 解析为 int 时,为什么会显示 NumberFormatException?
String ph=request.getParameter("phone");
int phone=Integer.parseInt(ph.trim());// exception is generated here
int 中不能有任何字符或符号,并且 int 的最大大小为 2,147,483,647,这意味着电话号码 555 555 5555 太大而无法存储在 int 中。
将解析更改为长,它应该可以解决您的问题
一个好的规则是不要在数字原语中存储任何数字,如 SSN 或电话号码。您希望将数值原语保留为您计划进行与数学相关的操作的值。如果可能,请将它们保留为字符串。
因为您输入的值不是有效的整数。确保其中没有奇怪的字符。
9835008199
高于 MAXINT,所以大概就是这样。
文档告诉我:
抛出 NumberFormatException - 如果字符串不包含可解析的整数。
另一方面:不要将电话号码存储为整数。你会遇到麻烦(事实上你已经遇到了)。经验法则:如果您不想用数字进行数学运算,则不是int
,而是string
。
使用 isNumber 函数来检查它是否是一个有效的数字。