我制作了一个程序,该程序读取包含推文的文本文件。该文本文件为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]
是空字符串。
调试代码的一种好方法是在执行期间打印(或记录)值,尤其是在引发异常时。