【发布时间】:2016-07-28 07:45:57
【问题描述】:
在某个 try 块中,当我使用 Integer.parseInt(string1) 和Integer.parseInt(string2) 时,我有两个 String 变量可能会导致 NumberFormatException。问题是,如果我catch出现异常,如何知道哪个字符串是麻烦制造者?我需要得到麻烦制造者的变量名。
下面是一些示例代码:
public class test {
public static void main(String[] args) {
try {
String string1 = "fdsa";
String string2 = "fbbbb";
Integer.parseInt(string1);
Integer.parseInt(string2);
} catch (NumberFormatException e) {
e.printStackTrace();
}
}
}
而e.printStackTrace() 方法并没有告诉我变量名;它只是告诉我麻烦制造者的内容。
java.lang.NumberFormatException:对于输入字符串:“fdsa”在 java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 在 java.lang.Integer.parseInt(Integer.java:580) 在 java.lang.Integer.parseInt(Integer.java:615) 在 test.main(test.java:9) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
进程以退出代码 0 结束
我需要知道变量名的原因是我需要提示用户发生了什么。例如,告诉用户 string1 是错误的使用
System.out.println(troubleMakerName + "is wrong!")
在我的要求中,用户应该输入
fd=(fileName,maxLength,minLength)
然后我将分析输入字符串并创建一些响应。所以我想检查maxLength 和minLength 是否会抛出NumberFormatException。在这种情况下,如果minLength有问题,那么我需要提示用户minLength错误。
【问题讨论】:
-
1) 您可以查看异常以查看抱怨的值(例如消息、堆栈跟踪中的行号); 2)您可以将
parseInts 放在单独的try/catch块中。 -
e.printStackTrace(),或者任何你的异常变量被调用。但请注意,这不能以编程方式告诉您变量的名称,因为变量名称在运行时不存在。 -
@AndyTurner, 1) 此类中的小代码删除/插入将破坏整个寻线算法。 2)看起来像代码重复
-
@WannabeCoder 如果有一种简单的方法来验证输入,那是正确的。对于整数,至少在标准库中没有。因此,使用 parseInt 并在此处捕获表达式实际上是解决问题的最直接且不易出错的方法。如果您需要的唯一东西是验证整数的能力,那么几乎没有理由包含 Guava 或 apache Commons。不要过度设计。
标签: java exception exception-handling