我制作了一个程序,它读取包含推文的文本文件。这个文本文件是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();
}
答案 0 :(得分:1)
16MB并不大。您的代码保持运行,因为您捕获异常并只显示堆栈跟踪。 temp
为零长度数组的异常结果,很可能是因为splitted[x]
是一个空字符串。
调试代码的一种好方法是在执行期间打印(或记录)值,尤其是在抛出异常时。
答案 1 :(得分:0)
ArrayIndexOutOfBounds异常不是由大量数据引起的。当您尝试访问不存在的元素时会导致它们。
int[] apples = new int[5];
apples[7];
这会给我一个ArrayIndexOutOfBoundsException,因为apples [7]
不存在。