在数组中存储字符串并拆分字符串

时间:2014-10-10 03:35:01

标签: java arrays

我在单一任务中遇到Java问题。我们已经获得了一个文件,其中列出了一组信息(还有更多,这只是一个格式化示例):

57363 Joy Ryder D D C C H H C D
72992 Laura Norder H H H D D H H H
71258 Eileen Over C F C C C C P

对于我的生活,我无法弄清楚如何将其存储在一个数组中,我需要将它拆分,因为这些字母需要转换为数字并取平均值,然后需要将其存储到数组中第二阵列。

我是Java的新手,因此我不知道在代码开头需要导入的很多类型的东西,所以在任何回复中解释代码更改都将非常感激。我到目前为止的代码如下:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class StudentGPA_16997761 {

  public static void main(String[] args) throws FileNotFoundException {
    Scanner kb = new Scanner(System.in);

    //get file
    System.out.print("Please enter the name of the file containing student information: ");
    String gradeFile = kb.next();
    Scanner grades = new Scanner(new File(gradeFile));

    if (new File(gradeFile).exists()) {
      while (grades.hasNextLine()) {
        System.out.println(grades.nextLine());
      }
    }

    //student identification number, a first name, a surname, then 8 individual alphabetic characters that represent the
    //unit grades for the student. Hence, each line of data in the text file represents a student and the grades
    //they achieved in 8 units of study

    //need to make array to hold student information
    //need to make array that holds student id and GPA

  }
}

我知道它有效,因为System.out.println打印出我希望它们被读取的行,但我无法弄清楚如何存储它们。我想我能够让分裂工作,但是仍然需要阵列/ arraylist ......

2 个答案:

答案 0 :(得分:1)

您可以使用分隔符将字符串拆分为数组。在您的示例中,如果所有名字和姓氏本身都不包含空格,则可以执行以下操作:

while (grades.hasNextLine()) {
    String line = grades.nextLine();
    String[] parts = line.split(" ");

    // get the basics
    String id = parts[0];
    String firstname = parts[1];
    String lastname = parts[2];

    // extract the grades
    int size = parts.length - 3;
    String[] gradelist = new String[size];
    System.arraycopy(parts, 3, gradelist, 0, size);

    // do something with the grades
}

答案 1 :(得分:0)

Java特别擅长OOP - 面向对象编程。输入文件的每一行都是学生,这是您可以定义的对象的完美示例。让我们定义一个包含所需信息的Student类:

public class Student{
    public final int ID;
    public final String name;
    private LinkedList<Character> grades;
    private double grade;    

    public Student(int i; String n, String[] g){
        ID = i;
        name = n;
        grades = new LinkedList<Character>();
        for(String s : g){
            grades.add(s.charAt(0));
        }

        //Do parsing to turn a list of letters into a grade here...
    }

    public double getGrade(){
        return grade;
    }
}

然后,您可以构建学生在阅读时存储信息。把它放在当前while循环所在的代码中。

LinkedList<Student> students = new LinkedList<Student>();
while (grades.hasNextLine()) {
    String[] line = grades.nextLine().split("\\s");
    Student s = new Student(Integer.parseInt(line[0]), 
        line[1] + " " + line[2], 
        Arrays.copyOfRange(line, 3, line.length));
   students.add(s); 
}

然后在必要时为学生工作。