Java 如何读取csv文本文件,以便将csv文件中的特定值与用户输入进行比较?

Java 如何读取csv文本文件,以便将csv文件中的特定值与用户输入进行比较?,java,Java,我正在制作一个程序,帮助用户计算从英国机场到国际机场的航班可能带来的利润。英国机场可以是LPL或BOH 现在,我想从csv文本文件中读取数据,并将其与用户输入进行比较,以检查用户想要的国际机场是否与csv文件中的相同国际机场相匹配。我该怎么做呢 文本文件内容 JFK,John F Kennedy International ORY,Paris-Orly MAD,Adolfo Suarez Madrid-Baranjas AMS,Amsterdam Schipol CAI,Cairo Intern

我正在制作一个程序,帮助用户计算从英国机场到国际机场的航班可能带来的利润。英国机场可以是LPL或BOH

现在,我想从csv文本文件中读取数据,并将其与用户输入进行比较,以检查用户想要的国际机场是否与csv文件中的相同国际机场相匹配。我该怎么做呢

文本文件内容

JFK,John F Kennedy International
ORY,Paris-Orly
MAD,Adolfo Suarez Madrid-Baranjas
AMS,Amsterdam Schipol
CAI,Cairo International
代码:

    import java.io.IOException;
    import java.io.FileWriter;
    import java.io.BufferedReader;
    import java.io.FileReader;
    import java.util.ArrayList;
    import java.util.Scanner;

    class Main {

    // menu method
     static void menu() {
       System.out.println("------------------------------------------------------");
       System.out.println("| Enter 1 to input airport details                   |");
       System.out.println("| Enter 2 to input flight details                    |");
       System.out.println("| Enter 3 to enter price plan and calculate profit   |");
       System.out.println("| Enter 4 to clear data                              |");
       System.out.println("| Enter 5 to quit                                    |");
       System.out.println("------------------------------------------------------");
  
    }

      // text file
      public static void main(String[] argv) throws Exception {
        BufferedReader myFile = new BufferedReader(new FileReader("Airports.txt"));
        ArrayList<String> listOfLines = new ArrayList<>();

        String line = myFile.readLine();
        while (line != null) {
           listOfLines.add(line);
           line = myFile.readLine();

        }
        myFile.close();


       // main code
       Scanner scanner = new Scanner(System.in);

       System.out.println("\n" + "Welcome");
       menu();

       int menuChoice = scanner.nextInt();

       if (menuChoice == 5) {
       System.out.println("\n" + "You have selected quit");
       System.out.println("Program ending.");
      
       } else if (menuChoice == 1) {
        System.out.println("\n" + "You have selected input airport details");
        System.out.println("\n" + "Enter 3 letter airport code for UK airport");
        String ukCode = scanner.next();

        if (ukCode == "LPL" || ukCode == "BOH") {
        
         //where I want to read csv text file and compare user input
       }
     }
   }
 }
import java.io.IOException;
导入java.io.FileWriter;
导入java.io.BufferedReader;
导入java.io.FileReader;
导入java.util.ArrayList;
导入java.util.Scanner;
班长{
//菜单方法
静态无效菜单(){
System.out.println(“--------------------------------------------------------------”);
System.out.println(“|输入1以输入机场详细信息|”);
System.out.println(“|输入2以输入航班详细信息|”);
System.out.println(“|输入3输入价格计划并计算利润|”);
System.out.println(“|输入4以清除数据|”);
System.out.println(“|输入5退出|”);
System.out.println(“--------------------------------------------------------------”);
}
//文本文件
公共静态void main(字符串[]argv)引发异常{
BufferedReader myFile=新的BufferedReader(新文件阅读器(“Airports.txt”);
ArrayList listOfLines=新的ArrayList();
String line=myFile.readLine();
while(行!=null){
添加(行);
line=myFile.readLine();
}
myFile.close();
//主代码
扫描仪=新的扫描仪(System.in);
System.out.println(“\n”+“欢迎”);
菜单();
int menuChoice=scanner.nextInt();
如果(menuChoice==5){
System.out.println(“\n”+”您已选择退出”);
System.out.println(“程序结束”);
}else if(menuChoice==1){
System.out.println(“\n”+“您已选择输入机场详细信息”);
System.out.println(“\n”+“为英国机场输入3个字母的机场代码”);
字符串ukCode=scanner.next();
如果(ukCode==“LPL”| | ukCode==“BOH”){
//我想读取csv文本文件并比较用户输入
}
}
}
}

在java中,字符串是引用对象而不是原语。这意味着字符串的值是引用(也称为名称引用)。对于基本体,实例的引用是一个值。。。但除此之外,Java是一种“按名称引用”对象实例的语言

因此,将字符串与
.csv
中的值进行比较需要使用
ukCode.equals(“LPL”)
而不是
=
进行比较(因为这将比较参考值)

现在。。。当您想要“查找”作为LPL或BOH提供的值时,您需要将有效值存储在
集合
(例如
哈希集合
)中,以便进行快速比较。如果您迭代一个
列表
ArrayList
),该过程将非常缓慢(
O(n)
-访问速度与列表中的元素数量成正比-访问速度是“线性的”)

设置速度更快的原因是
HashSet
的值存储在与其hashCode等价的地址/位置(确保您知道
.equals()
/
.hashCode()
之间的关系,这样您就不会出现奇怪的错误)。由于
散列集的元素存储在可直接计算的散列地址位置,因此检查其中元素的存在速度很快(
O(1)
-“常量”时间)


一旦您在一个集合中有了有效的值,解决方案将扩展到多个值,而不会降低性能。

请转到以了解如何/询问什么。仅仅放弃“这就是我想要的”的要求是不可取的。当你自己尝试某件事,并且遇到特定问题时,我们很乐意提供帮助。但请理解,这个地方并不是为了给你们提供指导,可能需要很多步骤才能让你们从你们的愿景变成一个工作计划。我的意思是:是的,你写了一些代码(这也可能只是你的作业模板代码)。但是你停止了。你没告诉我们任务的哪个方面给你带来了问题?!老实说:我不明白为什么人们会投票支持这个请求。最后:
ukCode==“LPL”
。。。请阅读。。。您可以看到,在开始比较从文件读取的值之前,您必须首先了解如何正确比较值。如果您的csv数据始终在一行中,并且数据不能包含分隔符(
),您可以简单地使用。否则,可能值得寻找csv解析器库,但这可能不是重点,因为这看起来像是一个家庭作业示例。