[英]How do i compare the dates read from csv file, such that I will only count those post with that month?
[英]How do I read csv text file so I can compare specific values from csv file with user input?
我正在制作一个程序,帮助用户计算从英国机场到国际机场的航班可能的盈利能力。 英国机场可以是 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 是一种“按名称引用”对象实例的语言。
因此,将字符串与.csv
的值进行比较需要您使用ukCode.equals("LPL")
而不是==
进行比较(因为这将比较参考值)。
现在...当您想“查找”作为 LPL 或 BOH 提供的值时,您需要将有效值存储在Set
(例如HashSet
)中,以便您可以进行快速比较。 如果您迭代一个List
(例如ArrayList
),该过程将显着变慢( O(n)
- 访问速度与列表中的元素数量成正比 - 访问速度是“线性”的)。
Set 更快的原因是因为HashSet
的值存储在与它们的 hashCode 等效的地址/位置(确保您了解.equals()
/ .hashCode()
之间的关系,因此您不会最终出现奇怪的错误)。 由于HashSet
元素存储在可直接计算的散列地址位置,因此检查其中的元素是否存在很快( O(1)
- “常数”时间)。
一旦您在 Set 中有有效值,该解决方案将扩展到许多值而不会降低性能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.