我有一个文本文件,其中包含学生编号(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的初学者。
答案 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,值是学生对象。 您可以使用输入的密钥从哈希表中检索学生对象,并检查引脚是否通过。