在java中分离字符串并将其与文本文件匹配
我有一个文本文件,其中包含学生编号(9位)、pin(4位)、名字和姓氏。看起来是这样的: 4568643244965,伊夫斯,道尔顿 迈克尔·贾格尔,4576424552164 1324354653578,艾伦麦克瓦尔 5432475312854,琼斯,艾伦 学生输入其学生编号,然后输入pin。程序将他的输入与文本文件匹配,并检查是否匹配 到目前为止,我已经将文本逐行分离,并将其存储到ArrayList中,然后考虑使用“,”将其拆分。我也考虑过使用地图,但也不知道如何使用它来存储名称在java中分离字符串并将其与文本文件匹配,java,arrays,string,parsing,Java,Arrays,String,Parsing,我有一个文本文件,其中包含学生编号(9位)、pin(4位)、名字和姓氏。看起来是这样的: 4568643244965,伊夫斯,道尔顿 迈克尔·贾格尔,4576424552164 1324354653578,艾伦麦克瓦尔 5432475312854,琼斯,艾伦 学生输入其学生编号,然后输入pin。程序将他的输入与文本文件匹配,并检查是否匹配 到目前为止,我已经将文本逐行分离,并将其存储到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");
}
String studentdb=sn_field.getText()//从输入中获取学生编号
字符串pindb=pin_字段。getText()//从输入获取pin码
试一试{
文件f=新文件(“文件名”);
扫描仪sc=新扫描仪(f);
ArrayList编号=新的ArrayList();
ArrayList pswd=新的ArrayList();
while(sc.hasNextLine()){
字符串行=sc.nextLine();
//=行分割(“\n”);
字符串sn=行;
人员。添加(序号);
}
//if(people.contains(studentdb)){
//System.out.println(“通过”);}
}catch(FileNotFoundException f){
系统输出打印(“未找到文件”);
}
总之,如果学生号和pin都是错误的,它应该给出一个错误,如果两者都是正确的和匹配的,它通过。如果有任何帮助,我将不胜感激,因为我只是一名Java初学者。我能够用以下示例处理您的文件。感谢这个问题,因为它为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;
}
}
}
import java.io.IOException;
导入java.nio.file.Files;
导入java.nio.file.Path;
导入java.nio.file.path;
导入java.util.Optional;
导入java.util.Scanner;
公共班级学生信息匹配器
{
私有静态最终路径文件\u Path=Paths.get(“C:\\projects\\playerd\\src\\main\\resources\\studentinfo.txt”);
公共静态void main(字符串[]args)引发IOException
{
扫描仪=新的扫描仪(System.in);
System.out.print(“请输入您的学号:”);
String studentNumber=scanner.next();
System.out.print(“请输入您的pin:”);
String pin=scanner.next();
可选匹配PersonRecord=
Files.line(文件路径)
.map(直线->直线分割(“,”)
.map(CSV值->新人(CSV值))
.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());
}
其他的
{
System.out.println(“未找到匹配记录”);
}
}
私人静态类人
{
私人最终字符串studentNumber;
私有最终字符串pin;
私有最终字符串lastName;
私有最终字符串名;
私人(字符串[]CSV值)
{
this.studentNumber=csv值[0].trim();
this.pin=csvValues[1].trim();
this.lastName=csvValues[2].trim();
this.firstName=csvValues[3].trim();
}
私有字符串getStudentNumber()
{
返回学号;
}
私有字符串getPin()
{
回位销;
}
私有字符串getLastName()
{
返回姓氏;
}
私有字符串getFirstName()
{
返回名字;
}
}
}
以下是您如何实现这一目标的想法:
创建一个“学生”类:
在循环中,您可以创建学生对象并将其添加到哈希表中。
键是studentId,值是student对象。
您可以使用输入的键从哈希表中检索学生对象,并检查pin是否通过。顺便说一句,如果某些逗号之间有空格怎么办:1324354653578,McIvar,Alan 5432475312854,Jones,AlanYeah我在最初的运行中看到了这一点,但选择忽略它,这可能对您没有帮助。您可以通过将Person构造函数更改为使用trim()方法来解决此问题。我将编辑我的回复以包含它。我更新了示例。请参见Person构造函数中它如何调用this.studentNumber=csvValues[0].trim()等等?这将删除文件中每个逗号分隔字符串的前导和尾随空格。我测试了一下,效果很好。
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);
}
}