分离字符串并将它们与java中的文本文件进行匹配

时间:2015-09-24 18:07:56

标签: java arrays string parsing

我有一个文本文件,其中包含学生编号(9位数),图钉(4位),名字,姓氏。看起来像这样:

456864324,4965,前夕,道尔顿

457642455,2164,杰格,迈克尔

132435465,3578,McIvar,Alan

543247531,2854,琼斯,艾伦

学生输入学号,然后输入。程序将其输入与文本文件匹配,并检查它是否匹配。

到目前为止,我已逐行分离文本并将其存储到ArrayList中,然后考虑将其与","分开。我也考虑过使用地图,但也无法弄清楚我将如何存储地图。

        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的初学者。

2 个答案:

答案 0 :(得分: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;
      }
   }
}

答案 1 :(得分:0)

在此了解如何实现这一目标: 创建一个&#34;学生&#34;类:

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,值是学生对象。 您可以使用输入的密钥从哈希表中检索学生对象,并检查引脚是否通过。

相关问题