循环时抓住

时间:2017-10-11 02:55:41

标签: java exception exception-handling stack-overflow

我正在将字符串转换为Integer,所以当我收到任何字符时,抛出异常并且执行停止。我想跳过那个字符并打印所有剩余的数字,所以我一直抓住while循环。但是现在对于每个例外都会抛出一个错误,剩下的数字会按照异常进行打印,但是一旦抛出异常,代码就必须向团队发送邮件(我会将邮件部分放在catch中)。如果代码在每次抛出异常时发送邮件都不好,所以我必须收集while循环内的所有异常,并立即发送关于所有异常的邮件。有可能吗?

我将放置简单的示例代码。 (邮件部分我将在稍后处理,请告诉我收集所有异常并立即打印的逻辑。)

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class dummy {
    public static void main(String args[]) {
        String getEach="";
        List A  = new ArrayList();
        A.add("1");
        A.add("2");
        A.add("3");
        A.add("AA");
        A.add("4");
        A.add("5");
        A.add("dsfgfdsgfdshg");
        A.add("30");
        Iterator<String> map = A.iterator();

        while (map.hasNext()) {
            try {
                getEach = map.next();
                int getValue = Integer.parseInt(getEach);
                System.out.println("Value:::::: "+getValue);
            } catch (Exception E) {
                System.out.println("There is an exception c" +E.getMessage()); 
            }
        }
    }
}

2 个答案:

答案 0 :(得分:0)

使用Exception对象声明一个List类,然后收集它。

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class dummy {

    public static void main(String args[])

    {
        String getEach = "";

        List<String> A = new ArrayList<String>();
        A.add("1");
        A.add("2");
        A.add("3");
        A.add("AA");
        A.add("4");
        A.add("5");
        A.add("dsfgfdsgfdshg");
        A.add("30");
        Iterator<String> map = A.iterator();
        List<Exception> errList = new ArrayList<Exception>();
        while (map.hasNext()) {
            try {
                getEach = map.next();
                int getValue = Integer.parseInt(getEach);
                System.out.println("Value:::::: " + getValue);
            } catch (Exception E)
            {

                //System.out.println("There is an exception c" + E.getMessage());
                errList.add(E);
            }
        }

        if(!errList.isEmpty())
        {
            for(Iterator<Exception> eIter = errList.iterator();eIter.hasNext();)
            {
                Exception e = eIter.next();

                System.out.println("There is an exception c" + e.getMessage());
            }
        }
    }
}

答案 1 :(得分:0)

我可以假设完全放弃 try / catch 并使用以下内容:

while(map.hasNext()) {
    getEach = map.next();
    // If getEach contains the string representation of 
    // a Numerical value. The regular expression within
    // the matcher below will handle signed, unsigned, 
    // integer, and double numerical values. If getEach
    // holds a numerical value then print it.
    if (getEach.matches("-?\\d+(\\.\\d+)?")) {
        int getValue = Integer.parseInt(getEach);
        System.out.println("Value:::::: "+getValue);
    }
}