Java 使用delimeter将文本文件读入对象数组

Java 使用delimeter将文本文件读入对象数组,java,arrays,file,object,Java,Arrays,File,Object,以下是该文件的内容: 文件的前三行包含教师姓名、科目和课时,它们都存储在单独的字符串变量中 文件的其余部分包含Student对象的参数,该对象的签名为:Student(字符串名称、int-ID、int-grade 1、int-grade 2、int-grade 3、int-grade 5、int-grade 6、int-grade 7、int-grade 8、int-grade 9、int-grade 10) 我试图输入教师姓名、科目和课时,并将它们分别放入单独的字符串变量中 然后输入每个学生

以下是该文件的内容:

文件的前三行包含教师姓名、科目和课时,它们都存储在单独的字符串变量中

文件的其余部分包含Student对象的参数,该对象的签名为:Student(字符串名称、int-ID、int-grade 1、int-grade 2、int-grade 3、int-grade 5、int-grade 6、int-grade 7、int-grade 8、int-grade 9、int-grade 10)

我试图输入教师姓名、科目和课时,并将它们分别放入单独的字符串变量中

然后输入每个学生的信息并创建一个新的学生对象,然后每个学生对象将被放入学生对象数组中

以下是我目前的代码:

Scanner sf = new Scanner(new File("Test.txt"));
Student array[] = new Student[3];
for(int x = 0; x < array.length; x++)
{
  String name = "";
  int id = 0, gradeOne = 0, gradeTwo = 0, gradeThree = 0, gradeFour = 0, gradeFive = 0, gradeSix = 0, gradeSeven = 0, gradeEight = 0, gradeNine = 0, gradeTen = 0;
  array[x] = new Student(name, id, gradeOne, gradeTwo, gradeThree, gradeFour, gradeFive, gradeSix, gradeSeven, gradeEight, gradeNine, gradeTen);

}
int counter = 0;
int index = 0;
sf.useDelimiter(",");

String teacher = "", subject = "", period = "";

while(sf.hasNext())
{
  if(counter == 0)
  {
    teacher = sf.nextLine();

    counter++;
  }

  else if(counter == 1)
  {
    subject = sf.nextLine();
    counter++;
  }

  else if(counter == 2)
  {
    period = sf.nextLine();
    counter++;
  }

  else
  {
    array[index].studentName = sf.next();
    array[index].studentID = sf.nextInt();
    array[index].grade1 = sf.nextInt();
    array[index].grade2 = sf.nextInt();
    array[index].grade3 = sf.nextInt();
    array[index].grade4 = sf.nextInt();
    array[index].grade5 = sf.nextInt();
    array[index].grade6 = sf.nextInt();
    array[index].grade7 = sf.nextInt();
    array[index].grade8 = sf.nextInt();
    array[index].grade9 = sf.nextInt();
    array[index].grade10 = sf.nextInt();
    index++;
  }

}


for(int g = 0; g < index; g++)
{
  System.out.println(array[g].studentName + "\t" + array[g].studentID + "\t" + array[g].grade1 + "\t" + array[g].grade2 + "\t" + array[g].grade3 + "\t" + array[g].grade4 + "\t" + array[g].grade5 + "\t" + array[g].grade6 + "\t" + array[g].grade7 + "\t" + array[g].grade8 + "\t" + array[g].grade9+ "\t" + array[g].grade10);
  }
Scanner sf=新的扫描仪(新文件(“Test.txt”);
学生数组[]=新学生[3];
对于(int x=0;x
当我运行这个程序时,我得到了一个InputMismatchException,这是否意味着文件的前三行也需要一个逗号?还是我做错了什么?这是输入文件的最佳方式吗?任何建议都会有所帮助,谢谢。

调用
nextInt()
,使用分隔符
将从逗号到逗号读取整数。所以,在读完这行末尾的10年级后,就没有逗号了!因此,扫描仪读取到下一行的名称,从而导致
输入不匹配异常

如果你在文本文件中的10年级末尾加上逗号,问题就解决了一半

e、 g.
Jones Alex,532675100100,55,85,88,89100,55,32,66,

下一个问题是,扫描器不指向下一行,而是停留在逗号之前所在的同一行上(即在66之后)

我建议调用
sf.nextLine()
,而不要在每次while迭代结束时在
index++之前存储其值在你的代码中。

A)提供一个真实的(比如一个完整的带有行号的堆栈跟踪,并告诉我们指出了你源代码中的哪些行)B)“任何建议”通常不是这个网站的内容。