使用分隔符

时间:2018-02-18 18:04:04

标签: java arrays file object

以下是该文件的内容: Contents of the file

该文件的前三行包含教师姓名,科目和课程期间,这些都存储在单独的字符串变量中。

该文件的其余部分包含Student对象的参数,该对象的签名为:Student(String name,int ID,int grade1,int grade2,int grade3,int grade5,int grade6,int grade7,int grade8 ,int grade9,int grade10)

我正在尝试输入教师姓名,主题和课程期间,并将每个人都放入单独的字符串变量中

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

到目前为止,这是我的代码:

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);
  }

当我运行程序时,我得到一个InputMismatchException,这是否意味着该文件的前三行也需要逗号?或者我做错了什么?这是输入文件的最佳方式,任何建议都会有所帮助,谢谢。

1 个答案:

答案 0 :(得分:0)

使用分隔符nextInt()调用,将读取逗号到逗号的整数。所以,在该行的末尾读取grade10之后,没有逗号!因此,扫描程序会读取下一行的名称,从而导致InputMismatchException

如果您将逗号添加到文本文件中的grade10末尾,则可以解决问题的一半。

e.g。 Jones Alex,532675,100,100,55,85,88,89,100,55,32,66,

下一个问题是扫描仪没有指向下一行,而是停留在逗号之前的同一行(即紧接在66之后)。

我建议在代码sf.nextLine()之前的每次迭代结束时调用index++;而不保存其值。