如何测试转换是否会导致错误?

时间:2019-04-21 16:09:43

标签: java

我有各种类型的字符串,包括整数,*,+和@。它在哈希图中。当我遍历字符串时,我希望能够识别哪些部分是整数,哪些不是整数。例如,如果我使用“ * 12#”,则我想说if(string.substring(2,3))不是整数,则返回false。

下面,我正在测试是否将字符转换为整数会导致错误。但是,这给了我NumberFormatException。

//hm is hashmap
for(int i=hm.size()-1;i>=0;i--) {
            if(Integer.parseInt(hm.get(i))%1==0) {
                try {
                    System.out.println("integer");
                }
                catch(Exception e){
                    System.out.println("not integer");
                }
            }
        }

这是错误日志:

Exception in thread "main" java.lang.NumberFormatException: For input string: "-"
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at Prefix.findValue(Prefix.java:32)
    at Prefix.makeHashMap(Prefix.java:27)
    at Prefix.<init>(Prefix.java:10)
    at Prefix.main(Prefix.java:45)

解决此问题的更好方法是什么?

1 个答案:

答案 0 :(得分:1)

parseInt的调用必须在te try内部,并且您只应捕获要处理的异常:

for(int i = hm.size() - 1; i >= 0; i--) {
    try {
        // Try to parse it
        String temp = Integer.parseInt(hm.get(i));
        System.out.println("integer");

    // And for best practice, specify the exact exception
    } catch(NumberFormatException e) {
        System.out.println("not integer");
    }
}