2017-05-25 32 views
-3

我想从具有20行的文本文件中读取数据,并且应该将它们存储到数组中,并为它们分配变量,名字姓和成绩。因为我对他们输出作为姓氏,名字和年级,我决定使用令牌但不知何故,我得到这个错误:java.lang.ArrayIndexOutOfBoundsException:1个JAVA-将字符串拆分为令牌,但失败,出现错误

public static void main(String[] args) throws IOException { 
    int numberOfLines = 20; 
    studentClass[] studentObject = new studentClass[numberOfLines]; 
    readStudentData(studentObject); 

}  
    public static void readStudentData(studentClass[] studentObject)throws { 

    //create FileReader and BufferedReader to read and store data 
    FileReader fr = new FileReader("/Volumes/PERS/Data.txt"); 
    BufferedReader br = new BufferedReader (fr); 


    String line = null; 
    int i = 0; 

    //create array to store data for firstname, lastname, and score 
    while ((line = br.readLine()) != null){ 
     String[] stuArray = line.split(" "); 
     String stuFName = stuArray[0]; 
     String stuLName = stuArray[1]; 
     int score = Integer.parseInt(stuArray[2]); 
     studentObject[i] = new studentClass (stuFName, stuLName, score); 
     i++; 
    } 
    br.close(); 
    for(i = 0; i<studentObject.length; i++){ 
     System.out.print(studentObject[i].getStudentFName()); 
    } 

} 

,我得到的是专门这一行的错误:

String stuLName = stuArray[1]; 

这里是文本文件:

Duckey Donald 85 
Goof Goofy 89 
Brave Balto 93 
Snow Smitn 93 
Alice Wonderful 89 
Samina Akthar 85 
Simba Green 95 
Donald Egger 90 
Brown Deer 86 
Johny Jackson 95 
Greg Gupta 75 
Samuel Happy 80 
Danny Arora 80 
Sleepy June 70 
Amy Cheng 83 
Shelly Malik 95 
Chelsea Tomek 95 
Angela Clodfelter 95 
Allison Nields 95 
Lance Norman 88 
+1

显示您的文本文件。如果它在这条线上失败,这意味着对于一个特定的行,没有多于一个元素(有空格),我的意思是'这里是三个','justone'这秒会失败,因为数组只包含一个元素,并且会给你阵列索引错误 –

+0

如果你可以共享'Data.txt'文件来获得数据如何存储在那里,这可能是有帮助的。 –

+0

@JorgeCampos在这里你去家伙 –

回答

0

我想在你的文件的最后一行你有空格。确保最后一行没有像空间或制表符这样的空白空间。

0

首先,下一次你应该包括进口和输出也是你的代码 让我们很容易解决这个问题,还有一两件事,类名应该是 小号 tudentClass,不小号 tudentClass,它对我有不同的方法。 其次,我不能测试你的代码没有你的studentClass ...所以我只能猜到它: 考虑1:文本文件有一个更多的行(与空白)>>不可能因为String test = " "; test.split(" ")[0] == null; 考虑2:您的文本文件有错误,为了测试它,我建议你在while ((line = br.readLine()) != null){ 之后加上 System.out.println(line + ".")来测试它,相信我,你会收到最后一行,因为它很臃肿;