java.lang.ArrayIndexOutOfBoundsException?

时间:2015-02-01 19:52:06

标签: java android arrays csv

我正在创建一个Android应用程序,我想知道为什么我在代码中收到java.lang.ArrayIndexOutOfBoundsException

InputStreamReader inputStreamReader;
    try {
        inputStreamReader = new InputStreamReader(getAssets().open("myFile.csv"));
        Scanner inputStream = new Scanner(inputStreamReader);
        inputStream.next(); // Ignores the first line
        while (inputStream.hasNext()) {
            String data = inputStream.nextLine();
            String[] line = data.split(",");
            entryArray.add(line[1]);
        }

代码读取CSV文件,然后将文件中第二列的内容添加到全局ArrayList<String>(entryArray)。该错误专门针对:

entryArray.add(line[1]);

但我不确定为什么。此外,当我将其更改为:

时没有错误
entryArray.add(line[0]);

我正在阅读的我的CSV文件看起来有点像这样:

Name,Type,Description
programming,noun,the process of writing computer programs

3 个答案:

答案 0 :(得分:3)

也许您正在阅读一个空白行或一行不包含字符的行。在这种情况下,split数组只包含一个元素。

考虑只检查分割数组是否足够大,如果不是则跳过该行。

答案 1 :(得分:0)

您可以尝试将第二行更改为最后一行:

if (entryArray.size() > 1)
    entryArray.add(line[1]);

if (entryArray.size() > 1)
    entryArray.add(line[1]);
else
    entryArray.add(line[0]);

答案 2 :(得分:0)

感谢您的所有答案,但我找到了解决方案:

在我的代码中,我添加了一条日志消息来测试每个行数组中的元素数量,如下所示:

Log.d("This line length", "" + line.length);

我发现第一行只包含1个元素,而不是我预期的3个元素。 我发现问题是'while'语句下面的代码行:

inputStream.next(); // Ignores the first line

但这是跳过/忽略元素,而不是整行,所以我不得不将其更改为:

inputStream.nextLine(); // Ignores the first line