【问题标题】:java.lang.ArrayIndexOutOfBoundsException?java.lang.ArrayIndexOutOfBoundsException?
【发布时间】:2023-04-03 12:12:01
【问题描述】:

我正在制作一个 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

【问题讨论】:

  • 这失败了,entryArray.add(line[1]);,这行得通,entryArray.add(line[0]);,因此,line 只包含一个元素。

标签: java android arrays csv


【解决方案1】:

也许您正在读取一个空行,或者一个不包含 , 字符的行。在这种情况下,拆分数组仅包含一个元素。

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

【讨论】:

    【解决方案2】:

    您可以尝试将倒数第二行更改为:

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

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

    【讨论】:

      【解决方案3】:

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

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

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

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-30
        • 2016-04-11
        • 2014-06-20
        • 2017-10-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多