数组索引超出范围

时间:2017-05-24 13:36:38

标签: java arraylist text-files

我知道有一些关于这个特定错误的帖子,但这些帖子的答案似乎都没有解决我的问题。基本上我正在将一个txt文件读入arraylist listS。它编译没有错误,但是当我运行它时,我得到" ArrayIndexOutOfBoundsException:2"。显然问题在第359行,即" double tempArea = Double.parseDouble(tokenize [2]);"。我看不出该行有什么问题,所以我也检查了额外的大括号或分号,但没有找到。我在下面提供了我的代码。任何人都可以看到错误的原因是什么?

 ArrayList<String>listS = new ArrayList<>();


    try
    {
      BufferedReader bR = new BufferedReader (new FileReader("EssentialsSaleFile.txt"));
      String fileRead = bR.readLine();
      while(fileRead != null)
      {
                String[] tokenize = fileRead.split(",");
                String tempType = tokenize[0];
                String tempAddress = tokenize[1];
                double tempArea = Double.parseDouble(tokenize[2]);
                int tempNumOfBedrooms = Integer.parseInt(tokenize[3]);
                int tempNumOfToilets = Integer.parseInt(tokenize[4]);
                int tempNumOfGarages = Integer.parseInt(tokenize[5]);
                String tempSellerName = tokenize[6];
                String tempSellerPhone = tokenize[7];
                String tempSaleOfferDate = tokenize[8];
                String tempSaleOfferEndDate = tokenize[9];
                double tempAskingAmount = Double.parseDouble(tokenize[10]);
                String tempAssignedEmployee = tokenize[11];
                double tempSalesCommissionPerc = Double.parseDouble(tokenize[12]);

                String tempObj = new String();

                listS.add(tempObj);
                fileRead = bR.readLine();


      }



                bR.close();

    }





        catch(FileNotFoundException ex)
        {
                JOptionPane.showMessageDialog(null,"File not here.");
        }
        catch (IOException e)
        {
        } 

2 个答案:

答案 0 :(得分:1)

问题不在于代码本身。 tokensize数组包含的元素与您行中的逗号分隔字符串一样多。

由于访问第3个元素(ArrayIndexOutOfBoundsException)时出现tokenize[2],因此文件中只有一个逗号。

例如: 第foo,bar行为您提供了只有两个元素的数组["foo","bar"]。访问tokenize[2]会产生ArrayIndexOutOfBoundsException

答案 1 :(得分:0)

答案很简单。文件中有一行只包含一个逗号。用逗号分割这一行返回一个只有两个元素的数组,这使得访问tokenize [2]超出界限。

首先,您应该检查被检查的行包含的内容。 之后,如果tokenize的长度为13,则在拆分后添加一个检查,如果没有,则跳过该行或其他一些适当的操作,如显示消息或记录该行。