Java 如何读取csv文本文件,以便将csv文件中的特定值与用户输入进行比较?
我正在制作一个程序,帮助用户计算从英国机场到国际机场的航班可能带来的利润。英国机场可以是LPL或BOH 现在,我想从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
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解析器库,但这可能不是重点,因为这看起来像是一个家庭作业示例。