比较 java 中具有不同内容的 2 个文本文件(对于 text1 中的每一行都需要与 text2 中的每一行进行比较)

Comparing 2 text files with different content in java (for each lines in text1 need to compare to each line in text2)

我正在尝试比较两个 .txt 文件(它们的内容),但是当我执行这段代码时,我的应用程序进入了一次循环。我想逐行比较。例如,在 first.txt 中,我有 4 行,而在 second.txt 中,我有 10 行。我想比较一下(来自 first.txt):0 111 10 111 1(second.txt) 和 0 112 1(second.txt)。如您所见,它们具有不同的价值,但来源和目标相同。 因此,从 first.txt 我可以与 second.txt 比较超过 1 次。

有人可以纠正我的错误吗?

我的意思是这个文件: First.txt

source value target
0   111     1
0   222     2
0   333     3
0   444     4

Second.txt

source value target
0   111     1
0   222     2
0   333     3
0   444     4
1   555     1
2   987     1
0   112     1
0   223     2
0   334     3
0   445     4

这是我的代码:

        // create new reader for cs
        frCs = new FileReader("nodeCsArr.txt");
        lnrCs = new LineNumberReader(frCs);

        // create new reader for rs
        frRs = new FileReader("nodeRsArr.txt");
        lnRs = new LineNumberReader(frRs);

        System.out.println("------Read distance Current State-----");
        // read distance on Cs
        while((strCs=lnrCs.readLine())!=null){
            i=lnrCs.getLineNumber(); 
            //edited here
            System.out.println("snCs baris ke-: "+i);

            stateArray=strCs.split("\t");

            //kolomnya
            snCs= stateArray[0]; System.out.println("snCs: "+snCs);
            dCs= stateArray[1]; //System.out.println("dCs: "+dCs);
            tnCs = stateArray[2]; 
            NodeLength=dCs.length(); System.out.println("panjang= "+NodeLength);

            System.out.println("------Read distance Random State-----");
            // read distance on Rs
            if((strRs=lnRs.readLine())!=null){
                i=lnRs.getLineNumber();
                //edited here
                System.out.println("snRs baris ke-: "+i);

                stateArray=strRs.split("\t");

                //input array--starts opencl here
                snRs= stateArray[0]; System.out.println("snRs: "+snRs);
                dRs= stateArray[1]; //System.out.println("dRs: "+dRs);
                tnRs = stateArray[2];  

                if ((snCs.equals(snRs))&&(tnCs.equals(tnRs))) {
                    System.out.println("snCs= "+snCs+" tnCs= "+tnCs+" dcs= "+dCs);
                    System.out.println("snRs= "+snRs+" tnRs= "+tnRs+" drs= "+dRs);
                    dTot=0;
                    for (int j = 0; j < NodeLength; j++) {

                        if (dCs.toCharArray()[j]==dRs.toCharArray()[j]) {
                            difBit=0;    
                        }else{
                            difBit=1;
                        }
                        dTot=dTot+difBit;
                    }   
                    dist=dTot/NodeLength;
                    System.out.println("different bit= "+dTot);
                    System.out.println("distance= "+dist);  
                }
            }
        }
        //lnRs.close();

        lnrCs.close();`

我建议使用 Scanner 来读取每一行,即:

import java.util.Scanner;
(...)
Scanner stdin = new Scanner(System.in);
String line = stdin.nextLine();

在两个循环中比较它们(1. A 中的每一行,2. B 中的每一行)- 从 A 获取第一行并与 B 的每一行进行比较直到到达 lineB.length,然后获取第二行 frm A 并与 B 的每一行进行比较,从 A 获取下一行...

这是我的解决方案。我只是在 ArrayList

中逐行读取第一个文件('longer' 或 'shorter' 无关紧要)

然后我将逐行查看第二个文件并比较这些行。

first.txt:

0   111
0   222
0   333
0   444

second.txt:

0   111
0   222
0   333
0   444
1   555
2   987

这里是代码(为了简单起见,只是在主要方法中:

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Scanner;

public class CompareFiles {

    public static void main(String[] args) {
        boolean same = true;
        Scanner in = null;

        try {
            in = new Scanner(new FileReader("first.txt"));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        ArrayList<String> firstLines = new ArrayList<String>();
        while (in.hasNextLine()) {
            firstLines.add(in.nextLine());
        }
        in.close();

        try {
            in = new Scanner(new FileReader("second.txt"));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        int counter = 0;
        while (in.hasNextLine()) {
            if (counter < firstLines.size()) {
                if (!((in.nextLine()).equals(firstLines.get(counter)))) {
                    same = false;
                    break;
                }
                counter++;
            } else {
                break;
            }
        }
        in.close();
        System.out.println(same);
    }
}

记住,我只是从文件的开头检查文件是否相同。 所以: 一种 一种 和 一种 乙 一种 一种 会不一样。这实际上取决于您如何定义平等。