Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中分离字符串并将其与文本文件匹配_Java_Arrays_String_Parsing - Fatal编程技术网

在java中分离字符串并将其与文本文件匹配

在java中分离字符串并将其与文本文件匹配,java,arrays,string,parsing,Java,Arrays,String,Parsing,我有一个文本文件,其中包含学生编号(9位)、pin(4位)、名字和姓氏。看起来是这样的: 4568643244965,伊夫斯,道尔顿 迈克尔·贾格尔,4576424552164 1324354653578,艾伦麦克瓦尔 5432475312854,琼斯,艾伦 学生输入其学生编号,然后输入pin。程序将他的输入与文本文件匹配,并检查是否匹配 到目前为止,我已经将文本逐行分离,并将其存储到ArrayList中,然后考虑使用“,”将其拆分。我也考虑过使用地图,但也不知道如何使用它来存储名称

我有一个文本文件,其中包含学生编号(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);
  }
}