【问题标题】:how to split multiple lines and add them to an arraylist如何拆分多行并将它们添加到arraylist
【发布时间】:2018-07-20 19:29:51
【问题描述】:

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

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

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

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

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

一个测试(价值 100 分)

txt文件设置如下

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

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

5678,Another,Student,7,7,7,,75,75,,75

9012,Yet,Another,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;
} 

打印语句给了我一个输出

身份证,第一

姓名,姓氏

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

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

5678,Another,Student,7,7,7,,75,75,,75

9012,Yet,Another,10,10,10,,65,70,,50

他们应该给予

身份证

名字

姓氏

等等。

【问题讨论】:

    标签: java arrays eclipse file


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      我建议逐行使用扫描仪 - 将整行存储为输入字符串。然后,您可以使用 Java string.split() 之类的函数拆分行,将“,”作为分隔符选项。这将允许您在数组中返回字符串,然后您可以根据需要将其排序到您的数组列表中。有关 split() 函数的更多详细信息,请参阅here

      示例(可能要检查编译器):

      Scanner in = new Scanner(System.in);
      String input;
      
      //define arraylist outside of loop :-)
       ArrayList<String> arraylist1 = new ArrayList<>();
       ArrayList<String> arraylist2 = new ArrayList<>();
      
      
      (while in.hasNext()){
          //store entire line
          input= in.nextLine();
      
           //Splits input string with , stores each string in an index position in data[]
           String[] data = input.split(",");
      
           arraylist1.add(data[0]);
           arraylist2.add(data[1]);
           //etc....
      }
      

      希望这会有所帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-02-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-20
        • 1970-01-01
        • 2014-04-19
        相关资源
        最近更新 更多