比较2个阵列并删除重复的阵列?JAVA
所以我试图比较java中的两个巨大的文本列表。文本可能如下所示: 列表1:值1,值2,值3。。。 列表2:值1604,值7000,值1 重点是我喜欢将列表1中的每一行与列表2中的每一行进行比较(每个值都在自己的行中),并从列表2中删除重复项,然后将数组3写入文件。这就是我得到的: 编辑:比较2个阵列并删除重复的阵列?JAVA,java,arrays,compare,Java,Arrays,Compare,所以我试图比较java中的两个巨大的文本列表。文本可能如下所示: 列表1:值1,值2,值3。。。 列表2:值1604,值7000,值1 重点是我喜欢将列表1中的每一行与列表2中的每一行进行比较(每个值都在自己的行中),并从列表2中删除重复项,然后将数组3写入文件。这就是我得到的: 编辑: File haveFile = new File("Combine Without Dups.txt"); BufferedReader br = null; br = new Buff
File haveFile = new File("Combine Without Dups.txt");
BufferedReader br = null;
br = new BufferedReader(new FileReader(haveFile));
String line ;
String list = null ;
while ((line = br.readLine()) != null) {
list = line ;
}
File compareFile = new File("database.txt");
BufferedReader br2 = null;
br2 = new BufferedReader(new FileReader(compareFile));
String line2 ;
String list2 = null ;
while ((line2 = br2.readLine()) != null) {
list2 = line2 ;
list2.removeAll(list);
将第一个文件中的所有行读入
集合
(而不是列表
),同样地,将第二个文件中的所有行读入。例如,使用LinkedHashSet
s(保留插入顺序)
然后做:
// set2 contains lines in second file, set1 in first file
set2.removeAll(set1);
然后将set2
的内容写入结果文件
请注意,这假设没有重复的值
如果您使用Guava,您还可以使用来计算集合之间的差异,并直接从文件中读取行(注意,这不是Java 7的文件
——如果您使用Java 7,您可以使用-,并将文件
抛出窗口,以便更好地测量)
使用Java 7的完整代码:
final Path path1 = Paths.get("/path/to/file1");
final Path path2 = Paths.get("/path/to/file2");
final Path outfile = Paths.get("/path/to/outfile");
final List<String> list1 = Files.readAllLines(path1, StandardCharsets.UTF_8);
final List<String> list2 = Files.readAllLines(path2, StandardCharsets.UTF_8);
list2.removeAll(list1);
Files.write(outfile, list2, StandardCharsets.UTF_8);
final Path path1=Path.get(“/Path/to/file1”);
最终路径path2=Path.get(“/Path/to/file2”);
最终路径outfile=Path.get(“/Path/to/outfile”);
最终列表列表1=Files.readAllLines(路径1,StandardCharsets.UTF_8);
最终列表list2=Files.readAllLines(路径2,StandardCharsets.UTF_8);
清单2.移除所有(清单1);
write(outfile,list2,StandardCharsets.UTF_8);
将第一个文件中的所有行读取到集合(而不是列表
)中,同样从第二个文件中读取。例如,使用LinkedHashSet
s(保留插入顺序)
然后做:
// set2 contains lines in second file, set1 in first file
set2.removeAll(set1);
然后将set2
的内容写入结果文件
请注意,这假设没有重复的值
如果您使用Guava,您还可以使用来计算集合之间的差异,并直接从文件中读取行(注意,这不是Java 7的文件
——如果您使用Java 7,您可以使用-,并将文件
抛出窗口,以便更好地测量)
使用Java 7的完整代码:
final Path path1 = Paths.get("/path/to/file1");
final Path path2 = Paths.get("/path/to/file2");
final Path outfile = Paths.get("/path/to/outfile");
final List<String> list1 = Files.readAllLines(path1, StandardCharsets.UTF_8);
final List<String> list2 = Files.readAllLines(path2, StandardCharsets.UTF_8);
list2.removeAll(list1);
Files.write(outfile, list2, StandardCharsets.UTF_8);
final Path path1=Path.get(“/Path/to/file1”);
最终路径path2=Path.get(“/Path/to/file2”);
最终路径outfile=Path.get(“/Path/to/outfile”);
最终列表列表1=Files.readAllLines(路径1,StandardCharsets.UTF_8);
最终列表list2=Files.readAllLines(路径2,StandardCharsets.UTF_8);
清单2.移除所有(清单1);
write(outfile,list2,StandardCharsets.UTF_8);
如果您指的是组合列表1+列表2,则删除重复项
使用普通集合集合,因为它不包含重复项,当您添加值时,它将自动删除dpulicates,如果您的意思是组合列表1+列表2,则删除重复项
使用普通集合集合,因为它不包含重复项,当您添加值时,它将自动删除dpulicates,1。将2文件读入2 ArrayList
2.为一个在另一个内的循环创建2。第一个循环应在第一个列表中迭代,第二个循环应在第二个列表中迭代。
3.比较列表1和列表2的每个值。如果有相等的值,则将其删除。1.将2文件读入2 ArrayList
2.为一个在另一个内的循环创建2。第一个循环应在第一个列表中迭代,第二个循环应在第二个列表中迭代。
3.比较列表1和列表2的每个值。如果有相等的值,则将其删除。每个列表的值是否唯一?如中所示,列表可以有两个等效值吗?您可以使用HashSet而不是ArrayList,重复会自动删除。为什么这样做:BufferedReader br=null;br=新的BufferedReader(新的文件读取器(haveFile))?是的,它们是独一无二的。列表1包含12000个名称,每行一个名称。列表2包含42000个名称,我需要删除这12000个名称names@kon到目前为止,这是我唯一知道如何阅读的方法。我不需要它是完美的,只要得到这份工作,每个列表的值都是唯一的?如中所示,列表可以有两个等效值吗?您可以使用HashSet而不是ArrayList,重复会自动删除。为什么这样做:BufferedReader br=null;br=新的BufferedReader(新的文件读取器(haveFile))?是的,它们是独一无二的。列表1包含12000个名称,每行一个名称。列表2包含42000个名称,我需要删除这12000个名称names@kon到目前为止,这是我唯一知道如何阅读的方法。我不需要它是完美的,只要得到工作doneno我想从文件2中删除文件1中的每个名称。没有组合。好的,然后一个for循环解决了for的问题(int i=0;看,我想我明白了,但似乎我不能用FileWriter数组写入文件。FileWriter fw=new FileWriter(filename,true);fw.write(list3);fw.write(System.getProperty(“line.separator”);fw.close();确切地说,我不想eclipse说我需要cast.get。无论这意味着什么,我都不知道不,我想从文件2中删除文件1中的每个名称。没有组合。好的,然后一个for循环解决了for的问题(int I=0;看,我想我得到了它,但似乎我无法使用FileWriter数组写入文件。FileWriter fw=new FileWriter(filename,true);fw.write(list3);fw.write(System.getProperty(“line.separator”);fw.close();确切地说,我不想eclipse说我需要cast.get。不管这意味着什么,我都不知道我希望我提取的第三个文件每个字都有自己的行,并且与其他2个字的格式相同。只是没有12000行特定的行。不确定创建一个字符串会给我相同格式的名称吗?@anno我不明白你的意思“与其他2相同的格式”。当然,它将使用相同的格式写入。我的意思是,文件3在其自己的行中将有大约30000个名称,而不是一个接一个的名称。这不是问题。FileWriter
具有.newLine()
,只需在您编写的每个名称后写一个新行。不确定如何使用removeAll表示该方法未定义。(我在win7 64位上使用java eclipse)我