输入输出,并非所有行都具有相同数量的数据

时间:2013-05-29 14:15:18

标签: java arrays object io split

我已经获得了一个充满细节的文件,并且必须根据其各自的列提取并存储到不同的对象数组中。棘手的是,并非所有行都具有相同数量的数据。我可以读取文件,我可以分割它和一切。

20005,Arsenal,ManU,Arsenal,WestHam,Y,2,3,40000
2006,ManU,Chelsea,ManU,WestHam,N
2007,ManU,Arsenal,ManU,WestHam,Y,1,0,260000
2008,Chelsea,ManU,Chelsea,Swansea,Y,4,0,285630
2009,Chelsea,ManCity,Chelsea,Swansea,N

我可以将所有内容存储到第6列的数组中,之后,对于某些行,没有给出信息,那就是当我从eclipse中得到错误时。我该如何解决这个问题?

这是我的代码:(不发布所有内容,因为这是一项任务,人们可能正在寻找答案,我不想因为勾结而被抓住)

try{ 
Scanner kd = new Scanner(file);
    while(kd.hasNext()){
        String data = kd.nextLine();
        String [] values = data.split(",");
        String year = values[0];
        String winningscore= values[6];

我收到此错误:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6
at GrandFinal.<init>(GrandFinal.java:19)
at MainClass.main(MainClass.java:11)

3 个答案:

答案 0 :(得分:1)

检查阵列的长度!

if(value.length > 6){
    // messages are given
} else {
    // messages are not given
}

或者,也许,根据您提供的数据:

if(value[5].equals("Y")){
    // messages are given
} else {
    // messages are not given
}

答案 1 :(得分:1)

您需要检查values数组是否足够长。

if(values.length > 0){
     String year = values[0];
}
if(values.length > 6){ 
 //values.length == 6 means the last element you can access is number 5. 
     String year = values[6];
}

答案 2 :(得分:1)

对于下面的行:

2007,ManU,Arsenal,ManU,WestHam,Y,1,0,260000

如果1是您的 6 元素,那么:

  if(values.length > 6) {
       String winningscore= values[6];
  }

如果1,0,260000是您的 6 元素,那么它应该是:

  String winningScoreString = "";

  if(values.length > 6 ) {
       winningScoreString+= values[6];
  }

  if(values.length > 7 ) {
       winningScoreString+= "," + values[7];
  }

  if(values.length > 8 ) {
       winningScoreString+= "," + values[8];
  }