java - 如何分割多行并将它们添加到数组列表中

标签 java arrays eclipse file

我在从 txt 文件中分离信息时遇到问题,将该信息添加到列表中并使用该信息创建对象

此应用程序的数据文件将以逗号分隔(每条数据将由 逗号),纯文本文件。为了标记成绩类型(实验室、项目和测试成绩)的差异,需要使用一个 将包含空数据字段。文件的第一行将包含可能的点 练习。学生 ID 将是字符串。

示例 ID,名字,姓氏,10,10,10,,100,100,,100

三个实验室(每个实验室值(value) 10 分)

两个项目(每个项目值(value) 100 分)

一次测试(值(value) 100 分)

txt文件设置如下

ID,名字,姓氏,10,10,10,,100,100,,100

1234,乔,学生,10,8,9,,100,90,,100

5678,另一个,学生,7,7,7,,75,75,,75

9012,然而,另一个,10,10,10,,65,70,,50

对象类

public class Student {
private String identifcation;
private String firstName;
private String lastName;
private List labs;
private List project;
private List test;

public Student(String identifcation, String firstName, String lastName, List<Integer> labs, List<Integer> projects, List<Integer> test) {
    this.identifcation = identifcation;
    this.firstName = firstName;
    this.lastName = lastName;
    this.labs = labs;
    this.project = projects;
    this.test = test;
    }
}

类中的readfile方法

public List<Student> decode() {

    List<Student> students = new ArrayList<Student>();

    while (this.scan.hasNext()) {
        List<Integer> labs = new ArrayList<Integer>();
        List<Integer> projects = new ArrayList<Integer>();
        List<Integer> tests = new ArrayList<Integer>();

        String identifcation = this.scan.next();
        String firstName = this.scan.next();
        String lastName = this.scan.next();

//help  int lab =      the labs
//help  labs.add(lab); should add the 3 labs
//help  int project = 
//help  projects.add(project); should add the 2 projects
//help  int test = 
//help  tests.add(test); should add the 1 test

        System.out.println(identifcation);
        System.out.println(firstName);
        System.out.println(lastName);

        System.out.print(this.scan.nextLine());         

        Student real = new Student(identifcation, firstName, lastName, labs, projects, tests);
        students.add(real);
    }
    return students;
} 

打印语句给我的输出为

ID,第一个

姓名、姓氏

名称,10,10,10,,100,100,,100

1234,乔,学生,7,8,9,,80,90,,100

5678,另一个,学生,7,7,7,,75,75,,75

9012,然而,另一个,10,10,10,,65,70,,50

他们应该给予

ID

名字

姓氏

等等..

最佳答案

您可以使用分隔符为“,”的字符串分词器。您只需要逐行读取文件并将其标记化即可获取对象。我会写成如下。

    import java.util.ArrayList;
    import java.util.List;
    import java.util.StringTokenizer;

    class Student {
        private String identifcation;

        @Override
        public String toString() {
            return "Student{" +
                    "identifcation='" + identifcation + '\'' +
                    ", firstName='" + firstName + '\'' +
                    ", lastName='" + lastName + '\'' +
                    ", labs=" + labs +
                    ", project=" + project +
                    ", test=" + test +
                    '}';
        }

        private String firstName;
        private String lastName;
        private List labs;
        private List project;
        private List test;

        public Student(String identifcation, String firstName, String lastName, List<Integer> labs, List<Integer> projects, List<Integer> test) {
            this.identifcation = identifcation;
            this.firstName = firstName;
            this.lastName = lastName;
            this.labs = labs;
            this.project = projects;
            this.test = test;
        }

    }

    public class Main {
        public static void main(String[] args) {
            String line = "example ID,First Name,Last Name,10,10,10,,100,100,,100";
            StringTokenizer tokenizer = new StringTokenizer(line,",");
            while(tokenizer.hasMoreElements()) {
                String id = tokenizer.nextToken();
                String fname = tokenizer.nextToken();
                String lName = tokenizer.nextToken();

                List<Integer> labs = new ArrayList<Integer>(){{
                    add(Integer.parseInt(tokenizer.nextToken()));
                    add(Integer.parseInt(tokenizer.nextToken()));
                    add(Integer.parseInt(tokenizer.nextToken()));
                }};

                List<Integer> project = new ArrayList<Integer>(){{
                    add(Integer.parseInt(tokenizer.nextToken()));
                    add(Integer.parseInt(tokenizer.nextToken()));
                }};

                List<Integer> test = new ArrayList<Integer>(){{
                    add(Integer.parseInt(tokenizer.nextToken()));
                }};
                Student s1 = new Student(id,fname,lName,labs,project,test);

                System.out.println(s1.toString());
            }
        }
    }

关于java - 如何分割多行并将它们添加到数组列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51449246/

相关文章:

Java连接mysql错误

java - 序列化/反序列化 SIPDIalog

python - 我可以从 numpy 数组列表中创建一个具有一个可变维度的 numpy 数组吗?

eclipse - 项目验证错误

Java 并发 : how to get the worker thread's response asynchronously

java - 使用嵌入式 Felix 进行调试

c++ - 用c++-CIN获取几个整数并将它们放入数组中

javascript - 基于 "Date"的数据的数据结构

eclipse - 在 Eclipse 中运行单个 JUnit 测试

java - 在java中导入Dll库