猿问

比较 2 个文本文件并找出列表中的差异并找出哪些列表值不匹配

我正在使用 Scanner 读取 2 个文本文件(可能包含重复项)并将它们写入 arraylist。我正在比较两个 arraylist 以找出差异。当我打印出来时,我可以看到有什么区别,但我不知道哪个记录来自哪个文件(文本文件名)


text1.txt 中的内容


TIMESTAMP,FE,TDI,20190703113119,20190601000000,20190701000000,

TIMESTAMP,FE,KYMI,20190703113130,20190601000000,20190701000000,

TIMESTAMP,FE,UMRI,20190703113154,20190601000000,20190701000000,

TIMESTAMP,FE,MLI,20190703113211,20190601000000,20190701000000,

TIMESTAMP,FE,WOLI,20190703113221,20190601000000,20190701000000,

TIMESTAMP,FE,VEM,20190703113221,20190601000000,20190701000000,

TIMESTAMP,FE,ZER,20190703113154,20190601000000,20190701000000,

text2.txt 中的内容


TIMESTAMP,FE,TDL,20190703113119,20190601000000,20190701000000,

TIMESTAMP,FE,KYMA,20190703113130,20190601000000,20190701000000,

TIMESTAMP,FE,UMRC,20190703113154,20190601000000,20190701000000,

TIMESTAMP,FE,MLW,20190703113211,20190601000000,20190701000000,

TIMESTAMP,FE,WOLF,20190703113221,20190601000000,20190701000000,

TIMESTAMP,FE,VEM,20190703113221,20190601000000,20190701000000,

TIMESTAMP,FE,ZER,20190703113154,20190601000000,20190701000000,

代码:


Scanner prodScanner = new Scanner(prodFile);

     while (prodScanner.hasNextLine()) {

     String currentRecord = prodScanner.nextLine().trim(); 

                    if (currentRecord.length() > 0) {

                    prodRecordsFromStatement.add(currentRecord);

                  }

           }

Scanner nonProdScanner = new Scanner(nonProdFile);

while (nonProdScanner.hasNextLine()) {

            String currentRecord = nonProdScanner.nextLine().trim();  

            if (currentRecord.length() > 0) {                                   

     nonProdRecordsFromStatement.add(currentRecord);

                                }

                            }

Collection<String> result = new ArrayList<>(CollectionUtils.disjunction(prodRecordsFromStatement, nonProdRecordsFromStatement));

 List<String> resultList = new ArrayList<>(result);

 Collections.sort(resultList);




白衣染霜花
浏览 115回答 2
2回答

婷婷同学_

遍历resultList检查以查看当前项目是否也在prodRecordsFromStatement.如果是,则来自文件 1,否则来自文件 2。

HUH函数

您的解决方案需要具备怎样的性能?如果性能不是非常关键,并且您的列表不长,那么您可以改用 usingsubtract而不是 disjunction。例如Collection<String>&nbsp;resultProdRecords&nbsp;=&nbsp;new&nbsp;ArrayList<>(CollectionUtils.subtract(prodRecordsFromStatement,&nbsp;nonProdRecordsFromStatement)); Collection<String>&nbsp;resultNonProdRecords&nbsp;=&nbsp;new&nbsp;ArrayList<>(CollectionUtils.subtract(prodRecordsFromStatement,&nbsp;nonProdRecordsFromStatement));resultProdRecords将包含 prodRecordsFromStatement 中不在 nonProdRecordFromStatement 中的所有行。resultNonProdRecords将包含 nonProdRecordFromStatement 中不在 prodRecordsFromStatement 中的所有行。
随时随地看视频慕课网APP

相关分类

Java
我要回答