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



我正在制作一个程序,帮助用户计算从英国机场飞往国际机场的航班可能带来的利润。英国机场可以是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
}
}
}
}

在java中,字符串是引用对象,而不是基元。这意味着字符串的值是一个引用(也称为名称引用(。对于基元,实例的引用是一个值。。。但除此之外,Java是一种对象实例是"Java"的语言;由名称引用";。

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

现在。。。当你想";查找";如果提供的值是LPL或BOH,则需要将有效值存储在Set(例如HashSet(中,以便进行快速比较。如果你在List(例如ArrayList(上迭代,过程会慢得多(O(n)-访问速度与列表中元素的数量成比例-访问速度是"线性"(。

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

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

最新更新