Отделение имени от номера в текстовом файле - PullRequest
0 голосов
/ 08 мая 2018

Я пытаюсь прочитать текстовый файл, который выглядит так:

Tom 96 95 94 93 54

И разделить имена и номера. Затем я буду печатать итоговую оценку имени студента (сумму всех чисел) и среднюю оценку. У меня есть отдельный класс под названием Student, который содержит классы:

private String name;
   private int numOfQuizzesTaken;
   private int totalScore;
   public Student(String name){
       this.name = name;
   }
   public String getName() {
       return name;
   }
   public int getTotalScore() {
       return totalScore;
   }
   public void addQuiz(int score) {
       totalScore = totalScore + score;
       numOfQuizzesTaken++;
   }
   public double getAverageScore(){
       return totalScore/(double)numOfQuizzesTaken;
   }
}

Я знаю, что мне нужно использовать массив, но я не знаю, как отделить имя от чисел и сохранить эти числа для использования. Я написал подобный код без текстового файла, и это выглядело так:

Scanner nameInput = new Scanner(System.in);
    System.out.print("What is your name? ");
    String name = nameInput.next();

    Student student = new Student(name);


    student.addQuiz(96);
    student.addQuiz(94);
    student.addQuiz(93);
    student.addQuiz(92);
       System.out.println("Students Name: " + student.getName());
       System.out.println("Total Quiz Scores: " + student.getTotalScore());
       System.out.println("Average Quiz Score: " + student.getAverageScore());

Надеюсь, это дает некоторое понимание того, что я пытаюсь сделать, и мне нужна любая помощь, которую я могу получить.

Ответы [ 4 ]

0 голосов
/ 08 мая 2018

Вам нужно будет прочитать файл в строку, а затем разделить его на «». оттуда у вас будет первый индекс для имени, а другие индексы для оценки

File score = new File("quiz.txt");
Scanner scn = new Scanner(new FileInputStream(score));
String buffer = "";
while (scn.hasNext()) {
      buffer += scn.nextLine() + "\n";
}
String[] content = buffer.trim().split(" ");
String name  = content[0] ;
Student student = new Student(name);
for (int a = 1 ; a < content.length; a++) {
    int scoreval = Integer.parseInt(content[a]);
    student.addQuiz(scoreval);
}
0 голосов
/ 08 мая 2018

Если текстовый файл будет иметь следующий формат, вы можете прочитать всю строку, а затем разделить строку на символ " ". Первым элементом в массиве будет имя студента, остальные элементы будут оценками. Вот пример:

String s = fileReader.nextLine();

String[] split = s.split(" ");

Student student = new Student(split[0]);

Arrays.stream(split).skip(1) // skip the first element as it's a name
    .forEach(score -> student.addQuiz(Integer.parseInt(score)));
0 голосов
/ 08 мая 2018

Вы можете проанализировать ввод, используя "", сохранить его в массиве String или Object, как показано ниже, это

"Том 96 95 94 93 54"

представляет ввод, который вы прочитали от пользователя, это должна быть переменная, я предполагаю, что вы читаете информацию об ученике (имя и т. Д.) За один раз

    String[] studentInfoArray = "Tom 96 95 94 93 54".split(" ");
    String name = studentInfoArray[0];
    Integer quiz1 = Integer.parseInt(studentInfoArray[1]);
0 голосов
/ 08 мая 2018

Я думаю, вы должны использовать регулярное выражение, чтобы отделить числа от имен. После того, как вы извлекли строку, содержащую числа, вы можете разделить ее на пробелы (которые будут возвращать массив чисел) и создать хеш-карту для хранения данных (только если у вас есть уникальные имена), ключом является имя и массив оценка викторины является значением. Надеюсь это поможет. :)

Вы можете разобрать числа в целые числа или с плавающей точкой перед сохранением их в хэш-карту. Если имя содержит только алфавиты, то это регулярное выражение должно делать: ([A-Z,a-z])*\x20*(\d.*)

  • Группа 1 будет соответствовать имени.
  • Группа 2 выдаст вам строку, содержащую числа, давайте сохраним ее в String quizScoreString.

    String [] stringScores = quizScoreString.split ("\ s +");

...