Java将大数据添加到ArrayList

时间:2015-02-23 13:48:44

标签: java arraylist

我制作了一个程序,它读取包含推文的文本文件。这个文本文件是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();
    }

2 个答案:

答案 0 :(得分:1)

16MB并不大。您的代码保持运行,因为您捕获异常并只显示堆栈跟踪。 temp为零长度数组的异常结果,很可能是因为splitted[x]是一个空字符串。

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

答案 1 :(得分:0)

ArrayIndexOutOfBounds异常不是由大量数据引起的。当您尝试访问不存在的元素时会导致它们。

int[] apples = new int[5];
apples[7];

这会给我一个ArrayIndexOutOfBoundsException,因为apples [7]不存在。