Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
比较2个阵列并删除重复的阵列?JAVA_Java_Arrays_Compare - Fatal编程技术网

比较2个阵列并删除重复的阵列?JAVA

比较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

所以我试图比较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 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)我