Java 如何比较两个文件并删除不存在的行?
与文件2相比,我试图从文件1中删除不存在的行 例如: 输入 文件1Java 如何比较两个文件并删除不存在的行?,java,file,compare,hashset,Java,File,Compare,Hashset,与文件2相比,我试图从文件1中删除不存在的行 例如: 输入 文件1 text example word example word 文件2 example word 输出 文件1 text example word example word 我的代码完全相反:它消除了2个文件中的所有重复单词 我的实际产出是: 文件1 text 代码 BufferedReader reader 2=new BufferedReader(new FileReader(file2)); Set lines2
text
example
word
example
word
文件2
example
word
输出
文件1
text
example
word
example
word
我的代码完全相反:它消除了2个文件中的所有重复单词
我的实际产出是:
文件1
text
代码
BufferedReader reader 2=new BufferedReader(new FileReader(file2));
Set lines2=新哈希集(10000);
弦线2;
而((line2=reader.readLine())!=null){
行2.添加(行);
}
BufferedReader reader=新BufferedReader(新文件读取器(文件1));
设置行=新哈希集(10000);
弦线;
而((line=reader.readLine())!=null){
行。添加(行);
}
Set set3=新哈希集(行);
set3.移除所有(第2行);
您需要两个集合之间的交集。现在,您正在计算集合之间的对称差
public static void main(String []args){
Set<String> file1 = new HashSet<>();
Set<String> file2 = new HashSet<>();
file1.add("text");
file1.add("example");
file1.add("word");
file2.add("example");
file2.add("word");
Set<String> intersection = new HashSet<>(file1);
intersection.retainAll(file2);
System.out.println(intersection);
}
你需要两个集合之间的交集。现在,您正在计算集合之间的对称差
public static void main(String []args){
Set<String> file1 = new HashSet<>();
Set<String> file2 = new HashSet<>();
file1.add("text");
file1.add("example");
file1.add("word");
file2.add("example");
file2.add("word");
Set<String> intersection = new HashSet<>(file1);
intersection.retainAll(file2);
System.out.println(intersection);
}
好了,你的方法就快到了,你所缺少的只是你调用的另一行代码
lines.removeAll(set3);
然后你就有了所需结果的集合(行)。好的,你的方法就快到了,你所缺少的只是你调用的另一行代码
lines.removeAll(set3);
然后您就有了所需结果的集合(行)。在原始代码中,您先读取文件2,然后读取文件1,然后从文件1中删除文件2中的单词,留下一个不同的单词。 在这里,我写出了代码,并发表了评论。您需要有一个集合,然后从完整列表中删除该单词。 在我的代码中,我创建了一个新的集合,以防您想要重建第一个集合,并将其保留为未修改
package scrapCompare;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class CompareLines {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
//You create a set of words from file 1.
BufferedReader reader = new BufferedReader(new FileReader("file1"));
Set<String> lines = new HashSet<String>(10000);
String line;
while ((line = reader.readLine()) != null) {
lines.add(line);
}
//You create a set of words from file 2.
BufferedReader reader2 = new BufferedReader(new FileReader("file2"));
Set<String> lines2 = new HashSet<String>(10000);
String line2;
while ((line2 = reader2.readLine()) != null) {
lines2.add(line2);
}
//In your original code, you create a third set of words equal to file 1, and then delete all the words from file 2.
//It isolates the one different word, but you stopped there.
Set set3 = new HashSet(lines);
set3.removeAll(lines2);
lines.removeAll(set3);
//the answer set is made, in case you want to rebuild the lines set.
Set <String> answer = lines;
//iterator for printing to console.
Iterator<String> itr = answer.iterator();
//print the answer to console
while(itr.hasNext())
System.out.println(itr.next());
//close your readers
reader.close();
reader2.close();
}
包碎片比较;
导入java.io.BufferedReader;
导入java.io.FileReader;
导入java.io.IOException;
导入java.util.HashSet;
导入java.util.Iterator;
导入java.util.Set;
公共类比较{
公共静态void main(字符串[]args)引发IOException{
//TODO自动生成的方法存根
//您可以从文件1创建一组单词。
BufferedReader reader=新BufferedReader(新文件读取器(“文件1”));
设置行=新哈希集(10000);
弦线;
而((line=reader.readLine())!=null){
行。添加(行);
}
//您可以从文件2中创建一组单词。
BufferedReader reader2=新的BufferedReader(新文件读取器(“文件2”));
Set lines2=新哈希集(10000);
弦线2;
而((line2=reader2.readLine())!=null){
第2行。添加(第2行);
}
//在原始代码中,创建第三组与文件1相同的单词,然后从文件2中删除所有单词。
//它隔离了一个不同的词,但你在那里停了下来。
Set set3=新哈希集(行);
set3.移除所有(第2行);
行。移除所有(set3);
//如果要重建线集,则会生成答案集。
设置答案=行;
//用于打印到控制台的迭代器。
迭代器itr=answer.Iterator();
//将答案打印到控制台
while(itr.hasNext())
System.out.println(itr.next());
//关闭你的读者
reader.close();
reader2.close();
}
}在原始代码中,先读取文件2,然后读取文件1,然后从文件1中删除文件2中的单词,留下一个不同的单词。 在这里,我写出了代码,并发表了评论。您需要有一个集合,然后从完整列表中删除该单词。 在我的代码中,我创建了一个新的集合,以防您想要重建第一个集合,并将其保留为未修改
package scrapCompare;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class CompareLines {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
//You create a set of words from file 1.
BufferedReader reader = new BufferedReader(new FileReader("file1"));
Set<String> lines = new HashSet<String>(10000);
String line;
while ((line = reader.readLine()) != null) {
lines.add(line);
}
//You create a set of words from file 2.
BufferedReader reader2 = new BufferedReader(new FileReader("file2"));
Set<String> lines2 = new HashSet<String>(10000);
String line2;
while ((line2 = reader2.readLine()) != null) {
lines2.add(line2);
}
//In your original code, you create a third set of words equal to file 1, and then delete all the words from file 2.
//It isolates the one different word, but you stopped there.
Set set3 = new HashSet(lines);
set3.removeAll(lines2);
lines.removeAll(set3);
//the answer set is made, in case you want to rebuild the lines set.
Set <String> answer = lines;
//iterator for printing to console.
Iterator<String> itr = answer.iterator();
//print the answer to console
while(itr.hasNext())
System.out.println(itr.next());
//close your readers
reader.close();
reader2.close();
}
包碎片比较;
导入java.io.BufferedReader;
导入java.io.FileReader;
导入java.io.IOException;
导入java.util.HashSet;
导入java.util.Iterator;
导入java.util.Set;
公共类比较{
公共静态void main(字符串[]args)引发IOException{
//TODO自动生成的方法存根
//您可以从文件1创建一组单词。
BufferedReader reader=新BufferedReader(新文件读取器(“文件1”));
设置行=新哈希集(10000);
弦线;
而((line=reader.readLine())!=null){
行。添加(行);
}
//您可以从文件2中创建一组单词。
BufferedReader reader2=新的BufferedReader(新文件读取器(“文件2”));
Set lines2=新哈希集(10000);
弦线2;
而((line2=reader2.readLine())!=null){
第2行。添加(第2行);
}
//在原始代码中,创建第三组与文件1相同的单词,然后从文件2中删除所有单词。
//它隔离了一个不同的词,但你在那里停了下来。
Set set3=新哈希集(行);
set3.移除所有(第2行);
行。移除所有(set3);
//如果要重建线集,则会生成答案集。
设置答案=行;
//用于打印到控制台的迭代器。
迭代器itr=answer.Iterator();
//将答案打印到控制台
while(itr.hasNext())
System.out.println(itr.next());
//关闭你的读者
reader.close();
reader2.close();
}
}公共类移除行{
公共静态void main(字符串[]args)引发IOException{
String file=“../file.txt”;
字符串file1=“../file1.txt”;
字符串file2=“../file2.txt”;
BufferedReader reader2=新的BufferedReader(新文件读取器(file2));
Set lines2=新哈希集(10000);
弦线2;
而((line2=reader2.readLine())!=null){
第2行。添加(第2行);
}
BufferedReader reader1=新BufferedReader(新文件读取器(文件1));
Set lines1=新哈希集(10000);
字符串行1;
而((line1=reader1.readLine())!=null){
第1行。添加(第1行);
}
设置输出=lines1.stream().filter(l1->lines2.stream().anyMatch(l2->l2.equals(l1)).collect(Collectors.toSet());
字符集utf8=标准字符集.UTF_8;
Files.write(path.get(file)、outPut、utf8、StandardOpenOption.CREATE);
}
}
<