2015-09-24 3 views
1

У меня есть текстовый файл, который содержит номер студента (9 цифр), булавку (4 цифры), имя, фамилию. Который выглядит следующим образом:Разделив строки и сопоставив их с текстовым файлом в java

456864324,4965, Eves, Далтон

457642455,2164, Джаггер, Майкл

132435465, 3578, McIvar, Алан

543247531,2854, Джонс, Алан

Студент входит в число учеников, а затем выталкивает. Программа соответствует его вводу в текстовый файл и проверяет, соответствует ли оно или нет.

До сих пор я разделил текст по строкам и сохранил его в ArrayList, а затем подумал о разделении его на «,». Я также думал об использовании Maps, но не могу понять, как я буду хранить имена вместе с ним.

 String studentdb = sn_field.getText(); //get student number from input 
     String pindb = pin_field.getText(); //get pin from input 

     try { 
       File f = new File("file name"); 
       Scanner sc = new Scanner(f); 

       ArrayList<String> number= new ArrayList<String>(); 
       ArrayList<String> pswd = new ArrayList<String>(); 

       while(sc.hasNextLine()){ 
        String line = sc.nextLine(); 
        // = line.split("\n"); 

        String sn = line;     
        people.add(sn); 


       } 

      //if(people.contains(studentdb)){ 

      //System.out.println("pass");} 

      } catch (FileNotFoundException f) {   

       System.out.print("file not found"); 

      } 

В общем, если количество студентов и придавить и не правы, она должна дать ошибку, если оба правильны и матч, она проходит. Любая помощь будет оценена, поскольку я просто начинающий на Java.

ответ

1

Мне удалось обработать файл в следующем примере. Благодарим за проблему, поскольку она предоставила интересную игровую площадку для некоторых новых функций Java 8, с которыми я все еще знаком. , ,

import java.io.IOException; 
import java.nio.file.Files; 
import java.nio.file.Path; 
import java.nio.file.Paths; 
import java.util.Optional; 
import java.util.Scanner; 

public class StudentInformationMatcher 
{ 
    private static final Path FILE_PATH = Paths.get("C:\\projects\\playground\\src\\main\\resources\\studentinfo.txt"); 

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

     System.out.print("Please enter your student number: "); 
     String studentNumber = scanner.next(); 

     System.out.print("Please enter your pin: "); 
     String pin = scanner.next(); 

     Optional<Person> matchingPersonRecord = 
      Files.lines(FILE_PATH) 
        .map(line -> line.split(",")) 
        .map(csvValues -> new Person(csvValues)) 
        .filter(person -> person.getStudentNumber().equals(studentNumber) && person.getPin().equals(pin)) 
        .findFirst(); 

     if (matchingPersonRecord.isPresent()) 
     { 
     Person matchingPerson = matchingPersonRecord.get(); 
     System.out.println("Hello " + matchingPerson.getFirstName() + " " + matchingPerson.getLastName()); 
     } 
     else 
     { 
     System.out.println("No matching record found"); 
     } 
    } 

    private static class Person 
    { 
     private final String studentNumber; 
     private final String pin; 
     private final String lastName; 
     private final String firstName; 

     private Person(String[] csvValues) 
     { 
     this.studentNumber = csvValues[0].trim(); 
     this.pin   = csvValues[1].trim(); 
     this.lastName  = csvValues[2].trim(); 
     this.firstName  = csvValues[3].trim(); 
     } 

     private String getStudentNumber() 
     { 
     return studentNumber; 
     } 

     private String getPin() 
     { 
     return pin; 
     } 

     private String getLastName() 
     { 
     return lastName; 
     } 

     private String getFirstName() 
     { 
     return firstName; 
     } 
    } 
} 
+0

спасибо! что помогает! – user3765848

+0

Кстати, а если между ними есть пробел между такими запятыми: 132435465, 3578, McIvar, Alan 543247531,2854, Jones, Alan – user3765848

+0

Да, я видел это в своем оригинальном исполнении, но решил проигнорировать его, который, вероятно, Это полезно для вас. Вы можете решить это, изменив конструктор Person, чтобы использовать метод trim(). Я отредактирую свой ответ, чтобы включить его. – Nate

0

Вот идея, как можно достичь этого: Создать класс «студент»:

class student { 
    private String lastname; 
    private String firstname; 
    private String studentId; 
    private String pin; 

    // Getter and Setter methods 

    public static createNewStudent(String line) { 
    // split here the line and save the fields in the member variables 
    } 

    public boolean checkPinCode(String pin) { 
    return this.pin.equals(pin); 
    } 
} 

В вашем цикле вы можете создавать студенческие объекты и добавить их в Hashtable. Ключ studentId, а значение - объект-ученик. Вы можете получить объект-ученик из хеш-таблицы с введенным ключом и проверить, проходит ли штырь.