Java 数组索引超出范围

Java 数组索引超出范围,java,arraylist,text-files,Java,Arraylist,Text Files,我知道有一些关于这个错误的帖子,但是这些帖子的答案似乎都不能解决我的问题。基本上,我正在将一个txt文件读入arraylist列表。它编译时不会出错,但当我运行它时,会得到“ArrayIndexOutOfBoundsException:2”。显然,问题出在第359行,即“double tempArea=double.parseDouble(tokenize[2]);”。我看不出这行有任何错误,所以我也检查了额外的大括号或分号,但没有发现任何错误。我在下面包含了我的代码。有人知道错误的原因吗 A

我知道有一些关于这个错误的帖子,但是这些帖子的答案似乎都不能解决我的问题。基本上,我正在将一个txt文件读入arraylist列表。它编译时不会出错,但当我运行它时,会得到“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)
        {
        } 
ArrayList=newArrayList();
尝试
{
BufferedReader bR=新的BufferedReader(新文件阅读器(“EssentialsSaleFile.txt”);
字符串fileRead=bR.readLine();
while(fileRead!=null)
{
String[]tokenize=fileRead.split(“,”);
字符串类型=标记化[0];
字符串tempAddress=tokenize[1];
double tempArea=double.parseDouble(标记化[2]);
int tempnumofbeddooms=Integer.parseInt(标记化[3]);
int tempnumof=Integer.parseInt(标记化[4]);
int tempNumOfGarages=Integer.parseInt(标记化[5]);
字符串tempSellerName=tokenize[6];
字符串tempSellerPhone=tokenize[7];
字符串tempSaleOfferDate=tokenize[8];
字符串tempSaleOfferEndDate=tokenize[9];
double tempAskingAmount=double.parseDouble(标记化[10]);
字符串tempAssignedEmployee=tokenize[11];
double-tempSalesCommissionPerc=double.parseDouble(标记化[12]);
String tempObj=新字符串();
添加(tempObj);
fileRead=bR.readLine();
}
bR.close();
}
捕获(FileNotFoundException ex)
{
showMessageDialog(null,“文件不在此处”);
}
捕获(IOE异常)
{
} 

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

由于在访问第三个元素(
tokenize[2]
)时发生
ArrayIndexOutOfBoundsException
异常,因此文件中有一行只有一个逗号

例如:
foo,bar
给出了数组
[“foo”,“bar”]
,该数组只有两个元素。访问
tokenize[2]
将导致
arrayindexoutofbounds异常

答案很简单。文件中有一行正好包含一个逗号。用逗号分割这一行将返回一个只有两个元素的数组,这使得访问令牌化[2]超出了范围

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

Um,文本文件中只有两个元素的行?提示:尝试在执行拆分之前记录要拆分的行…显然
tokenize
仅包含2个元素。这就是错误消息告诉您的,这就是您必须查看的内容,在行之前设置一个断点,并检查
tokenize
fileRead