我制作了一个程序,该程序读取包含推文的文本文件。该文本文件为16MB,因此非常大。我的程序逐行读取它,并将单词添加到ArrayList中。这样做时,我得到了一个ArrayIndexOutOfBoundsException。我将代码调试到引发异常的部分。我注意到,代码在引发异常后继续运行,并将单词添加到ArrayList中。

java.lang.ArrayIndexOutOfBoundsException: 0
    at Test.main(Test.java:39)
java.lang.ArrayIndexOutOfBoundsException: 0
    at Test.main(Test.java:39)
java.lang.ArrayIndexOutOfBoundsException: 0
    at Test.main(Test.java:39)
java.lang.ArrayIndexOutOfBoundsException: 0
    at Test.main(Test.java:39)
#Jobs: 272
#Job: 269
#jobs: 225
#TweetMyJOBS: 223
#job: 155


这就是在控制台上的外观。在出现多个异常之后,我的程序运行并显示结果。结果也是错误的。例如,第一个应该是#Jobs:4251。有人知道为什么它会引发异常然后继续运行吗?

这是代码:

try
        {
            line = reader.readLine();
            // scan = new Scanner(textinput);
            while (line != null)
            {

                String[] splitted = line.split("#"); // Line splitted according to "#".

                for (int x = 1; x < splitted.length; x++)
                {
                String[] temp = splitted[x].split(" "); // String splitted with space and first word is hashtag.
                try
                {
                   //Line 39 is here.
                    hashtags.add(temp[0]); // hashtag added to ArrayList.

                } catch (ArrayIndexOutOfBoundsException e)
                {
                    e.printStackTrace();
                }

            }
            line = reader.readLine();
            linenum++;
        }

    } catch (FileNotFoundException e1)
    {
        e1.printStackTrace();
    }

最佳答案

16MB不大。您的代码保持运行,因为您捕获了异常并仅显示stacktrace。导致此异常的原因是temp是零长度的数组,很可能是因为splitted[x]是空字符串。

调试代码的一种好方法是在执行期间打印(或记录)值,尤其是在引发异常时。

10-07 16:32