文件内容为:
该文件的前三行包含教师的名称,主题和课程时段,每个都分为不同的类变量: String teacherName,String subject,String period。
该文件的其余部分包含具有签名为:
的Student对象的所有参数学生(String name,int studentID,int grade1,int grade2,int grade3,int grade4,int grade5,int grade6,int grade7,int grade8,int grade9,int grade10)
我对如何将学生的名字输入数组感到困惑,因为它在它之间包含一个空格,所以当我尝试使用.next()时,它只获取学生的姓氏而不是他们的全名名字,关于如何输入它的任何想法?
答案 0 :(得分:0)
如果您真的必须以这种方式使用该文件,并且您确定,studentId始终以数字开头,您可以先检查数字的首次出现,然后再分割您的行。
但是,如果您可以更改分隔符,我强烈建议您使用分号之类的内容。
答案 1 :(得分:0)
不便。像这样:
public class Foo {
public static void main(String[] args) throws IOException {
Data data = new Data();
try (BufferedReader in = new BufferedReader(new InputStreamReader(Foo.class.getResourceAsStream("data.txt")))) {
data.setTeacherName(in.readLine());
data.setSubject(in.readLine());
data.setPeriod(Integer.parseInt(in.readLine()));
String str;
while ((str = in.readLine()) != null) {
String[] studentData = str.split(";");
Data.Student student = new Data.Student();
student.setName(studentData[0]);
student.setId(Integer.parseInt(studentData[1]));
for (int j = 0; j < 10; j++)
student.addGrade(j, Integer.parseInt(studentData[j + 2]));
data.addStudent(student);
}
}
}
}
<强> Data.class 强>
public class Data {
private String teacherName;
private String subject;
private int period;
private Map<Integer, Student> students = new HashMap<>();
public void addStudent(Student student) {
students.put(student.getId(), student);
}
public static final class Student {
private String name;
private int id;
private int[] grades = new int[10];
public void addGrade(int pos, int value) {
if (pos < grades.length)
grades[pos] = value;
}
}
}
实际上,如果您知道学生的姓名可以space
,那么除了space
之外,您可以使用任何分隔符。
在一般用法中,csv
很容易创建和准备。但是,如果您的数据结构更复杂且具有层次性,例如就像在你的例子中,但在一个文件中有多个教师,我建议你看另一种格式: YAML 。
答案 2 :(得分:0)
首先创建一个用于存储学生标记的简单模型。我将此模型命名为Student。以下是学生模型的代码。
public class Student {
int[] marks;
public Student(){
this.marks = new int[10];
}
public void setMark(int i, int score){
marks[i] = score;
}
}
然后像往常一样阅读前三行。然后循环遍历所有行,同时在数组列表中创建和存储student对象,如下所示。
`
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
public class FileConnector {
public void readFile(String fileName){
String line =null;
ArrayList<Student> students = new ArrayList<Student>();
try {
// FileReader reads text files in the default encoding.
FileReader fileReader = new FileReader(fileName);
// Always wrap FileReader in BufferedReader.
BufferedReader bufferedReader = new BufferedReader(fileReader);
line = bufferedReader.readLine();
String teachersName = line;
line = bufferedReader.readLine();
String subject =line;
line = bufferedReader.readLine();
int period = Integer.valueOf(line);
while((line = bufferedReader.readLine()) != null) {
Student student = new Student();
String[] marks =line.split(" ");
for (int i = 0; i < marks.length; i++) {
student.setMark(i,Integer.parseInt(marks[i]));
}
students.add(student);
}
bufferedReader.close();
}
catch(FileNotFoundException ex) {
System.out.println(
"Unable to open file '" +
fileName + "'");
}
catch(IOException ex) {
System.out.println(
"Error reading file '"
+ fileName + "'");
// Or we could just do this:
// ex.printStackTrace();
}
}
}
` 现在你可以从main方法调用它
FileConnector fileConnector = new FileConnector();
fileConnector.readFile();