我尝试比较两个随机化的文本文件,并打印出两个文件中匹配的行。文件1:
Student1
Student2
Student3
Student4
档案二:
Student6
Student1
Student2
我希望输出为
Student1
Student2
我的代码如下。
public static void main(String[] args) throws IOException {
String first = "file1.txt";
String second = "file2.txt";
BufferedReader fBr = new BufferedReader(new FileReader(first));
BufferedReader sBr = new BufferedReader(new FileReader(second));
PrintWriter writer = new PrintWriter("test.txt", "UTF-8");
while ((first = fBr.readLine()) != null) {
String partOne1 = fBr.readLine();
String partTwo1 = sBr.readLine();
while ((second = sBr.readLine()) != null) {
System.out.println(first);
writer.println(first);
break;
}
}
writer.close();
fBr.close();
sBr.close();
5条答案
按热度按时间5f0d552i1#
这很简单=)尝试存储第一个文件的所有结果,并与第二个文件的所有行进行比较。
最好尽可能使用内存,不同while中的“while”可能会工作太长时间并混淆逻辑。
brjng4g32#
另一种方法是将两个文件放在两个arraylist中,使用arraylist的retainAll()方法获取公共文件,然后对它们进行打印之类的操作。
ru9i0ody3#
如果你正在使用Java8,下面是一个简洁的实现这个逻辑的方法。请注意,这只适用于Java8。它使用了一些lambda表达式和特性,而没有大量的样板代码。希望你至少会觉得它有趣
图纸:
8zzbczxx4#
如果您想要一个优雅的解决方案:
1.同时排序
1.按排序列表比较
首先,这是非常简单的。其次,排序是如此令人难以置信地优化,这通常会比任何手动编写的东西都要快,并产生优雅和易于理解的代码。
这里的大多数其他解决方案都是O(n*m)。这种方法是O(n log n + m log m),但常数很小。您可以使用散列表进行查找,这在理论上会产生O(n + m),但常数可能太大。
5anewei65#
下面是一个示例代码,它将在2个列表中打印匹配值和不匹配值