-3

我想比较 2 个或更多文本文件以查找重复条目。O/P 应该说文件中的那些行是否匹配。

我想将文件 1的每一行与文件 2的所有行进行比较(即,将文件 1 的第 1 行与文件 2 的所有行进行比较)。当我运行以下代码时,将文件 1 的第 1 行与文件 2 的所有行进行比较,然后程序被终止。

注意:我尝试了Danail Alexiev的想法(见答案),但循环无限运行,(也没有跳到文件 1 的第 2 行,文件 1 的第 1 行与文件 2 的所有行的无限循环)

下面的文件

文件 1:内容

21321sc231231a23d1a32df1adfsdfsdfsd
fsdfs4dfs
dfsdf
3sd1f
sdfs4df3s 
df0 
sd4f 
sdf 
sdf1 
3sdf 
sdfs4df6s 
fs1df 
3sdfsd 
fs.d1f 
s3d1
sdf1s 
df1 
sdf1sdf

文件 2:内容

21321sc231231a23d1a32df1adfsdfsdfsd
fsdfs4dfs
dfsdf
3sd1f
sdfs4df3s 
df0 
sd4f 
sdf 
sdf1 
3sdf 
sdfs4df6s 
fs1df 
3sdfsd 
fs.d1f 
s3d1
sdf1s 
df1 
sdf1sdf

代码:

while ((sCurrentLine1 =file1.readLine()) != null )
 {
  while ((sCurrentLine2 =file2.readLine()) != null )
   {
    if(sCurrentLine1.equalsIgnoreCase(sCurrentLine2))
     {
      System.out.println("=---Matched----=" + sCurrentLine1 + " -->" + sCurrentLine2);
     }
     else
     {
      System.out.println("=---Not Matched----=" + sCurrentLine1 + " -->" + sCurrentLine2);
     }
    }
  }

开/关

=---Matched----=1321sc231231a23d1a32df1adfsdfsdfsd -->1321sc231231a23d1a32df1adfsdfsdfsd =---Not Matched----=1321sc231231a23d1a32df1adfsdfsdfsd -->fsdfs4dfs =---Not Matched----=1321sc231231a23d1a32df1adfsdfsdfsd -->dfsdf =-- -不匹配----=1321sc231231a23d1a32df1adfsdfsdfsd -->3sd1f =---不匹配----=1321sc231231a23d1a32df1adfsdfsdfsd -->sdfs4df3s =---不匹配----=1321sc231231a23d1a32df1adfsdfsdfsd -->0不匹配匹配----=1321sc231231a23d1a32df1adfsdfsdfsd -->sd4f =---不匹配----=1321sc231231a23d1a32df1adfsdfsdfsd -->sdf =---不匹配----=1321sc231231a23d1a32df1adfsdfsdfsd -->sdf1 =---不匹配- ---=1321sc231231a23d1a32df1adfsdfsdfsd -->3sdf =---不匹配----=1321sc231231a23d1a32df1adfsdfsdfsd -->sdfs4df6s =---不匹配----=1321sc231231a23d1a32df1adfsdfsdfsd -->fs1df =---不匹配----=1321sc231231a23d1a32df1adfsdfsdfsd -->3sdfsd =---不匹配----=1321sc231231a23d1a32df1adfsdfsdfsd -->fs.d1f =---不匹配----=1321sc231231a23d1a32df1adfsdfsdfs s3d1 =---不匹配----=1321sc231231a23d1a32df1adfsdfsdfsd -->sdf1s =---不匹配----=1321sc231231a23d1a32df1adfsdfsdfsd -->df1 =---不匹配----=1321sc231231a23d1a32df1adfsdfsdfsd -->s

4

2 回答 2

1

您正在将第二个文件的每一行与第一个文件的每一行进行比较。

为了进行正确的比较,您必须检查匹配的行号。

将您的 while 循环更改为:

while (((sCurrentLine1 = file1.readLine()) != null) && ((sCurrentLine2 = file2.readLine()) != null) {
    // your comparison
}

确保包括检查以检测文件具有不同行数的情况。

编辑:

经过OP的澄清后,我想我知道问题所在。

您正在尝试随时读取文件。当您将 File1 中的第一行与 File2 中的所有行进行比较时,嵌套的 while 循环将停止,因为您已经读取了文件中的所有行并且每次readLine()都会返回。null

要解决此问题,您需要提前读取 File2 中的所有行,并使用它们与 File1 的行进行比较。

于 2016-07-04T14:02:32.103 回答
0
public void CompareFileMain()
{
   /*int tempvar = 0;
   int tempvar1 =0 ;*/
   String Tlines1[] = new String [100];
   String Tlines2[] = new String [100];
   String tempstring1 = null;
   String tempstring2 = null;
   int file1lines;
   int file2lines ;
   System.out.println(file1lines = linesOffile1());
   System.out.println(file2lines = linesOffile2());
   try {
    file1 = new BufferedReader(new FileReader(SOAPFile));
    file2 = new BufferedReader(new FileReader(RestFile));
    int oplines = 1;
    while ((sCurrentLine1 =file1.readLine()) != null ) 
    {
        tempstring1 = sCurrentLine1;
        while ((sCurrentLine2 =file2.readLine()) != null )
        {
               tempstring2 = sCurrentLine2;
                }
        if ((sCurrentLine2 =file2.readLine()) == null)
        {
           System.out.println("File 1 --> line# "+oplines +"\t");
           CompareFileSub(tempstring1, tempstring2);
        }
        oplines = oplines+1;
    }
        } catch (IOException e) {
        e.printStackTrace();
        }
}
public void CompareFileSub(String t1, String t2) throws IOException  // reading file 2 
{
  file2 = new BufferedReader(new FileReader(RestFile));
  int oplines = 1;
  while ((sCurrentLine2 =file2.readLine()) != null )
  {
    t2 = sCurrentLine2;
    if((t1.contains(t2) && (t2.contains(t1))))
    {
          System.out.print(t1+"-->"+t2+"---->matched \t");
          System.out.println("File 2 --> line# "+oplines +"\n");
    }
    else
    {
          System.out.print(t1+"-->"+t2+"---->not matched \t");
          System.out.println("File 2 --> line# "+oplines +"\n");
    }
              oplines = oplines+1;
 }
}

public int linesOffile1() //Count file 1 lines
{
  try {
    while ((sCurrentLine1 =file1.readLine()) != null )
    {
        //System.out.println("Taken line sCurrentLine1 "+sCurrentLine1);
        //System.out.println("Taken line sCurrentLine1 "+i);
        i=i+1;
    }                                   
        } catch (IOException e) {
            e.printStackTrace();
            }
   finally {
    try {
           if (file1 == null)file1.close();
         } catch (IOException ex) {
                ex.printStackTrace();
                }
    }
   return i;

}      
public int linesOffile2() //Count file 2 lines
{
  try {
    while ((sCurrentLine2 =file2.readLine()) != null )
    {   
    //System.out.println("Taken line sCurrentLine2 "+sCurrentLine2);
    //System.out.println("Taken line sCurrentLine2 "+j);
    j=j+1;
    }
        } catch (IOException e) {
            e.printStackTrace();
            }   
  finally {
    try {
        if (file2 == null)file1.close();
    } catch (IOException ex) {
            ex.printStackTrace();
            }
    }
 return j;
}      

输入:

文件1:

java
c++

test
stack
test
overflow
extraLine

文件2:

stack
overflow
test
java
c++

test

输出

8
7
File 1 --> line# 1  
java-->stack---->not matched    File 2 --> line# 1

java-->overflow---->not matched     File 2 --> line# 2

java-->test---->not matched     File 2 --> line# 3

java-->java---->matched     File 2 --> line# 4

java-->c++---->not matched  File 2 --> line# 5

java-->---->not matched     File 2 --> line# 6

java-->test---->not matched     File 2 --> line# 7

File 1 --> line# 2  
c++-->stack---->not matched     File 2 --> line# 1

c++-->overflow---->not matched  File 2 --> line# 2

c++-->test---->not matched  File 2 --> line# 3

c++-->java---->not matched  File 2 --> line# 4

c++-->c++---->matched   File 2 --> line# 5

c++-->---->not matched  File 2 --> line# 6

c++-->test---->not matched  File 2 --> line# 7

File 1 --> line# 3  
-->stack---->not matched    File 2 --> line# 1

-->overflow---->not matched     File 2 --> line# 2

-->test---->not matched     File 2 --> line# 3

-->java---->not matched     File 2 --> line# 4

-->c++---->not matched  File 2 --> line# 5

-->---->matched     File 2 --> line# 6

-->test---->not matched     File 2 --> line# 7

File 1 --> line# 4  
test-->stack---->not matched    File 2 --> line# 1

test-->overflow---->not matched     File 2 --> line# 2

test-->test---->matched     File 2 --> line# 3

test-->java---->not matched     File 2 --> line# 4

test-->c++---->not matched  File 2 --> line# 5

test-->---->not matched     File 2 --> line# 6

test-->test---->matched     File 2 --> line# 7

File 1 --> line# 5  
stack-->stack---->matched   File 2 --> line# 1

stack-->overflow---->not matched    File 2 --> line# 2

stack-->test---->not matched    File 2 --> line# 3

stack-->java---->not matched    File 2 --> line# 4

stack-->c++---->not matched     File 2 --> line# 5

stack-->---->not matched    File 2 --> line# 6

stack-->test---->not matched    File 2 --> line# 7

File 1 --> line# 6  
test-->stack---->not matched    File 2 --> line# 1

test-->overflow---->not matched     File 2 --> line# 2

test-->test---->matched     File 2 --> line# 3

test-->java---->not matched     File 2 --> line# 4

test-->c++---->not matched  File 2 --> line# 5

test-->---->not matched     File 2 --> line# 6

test-->test---->matched     File 2 --> line# 7

File 1 --> line# 7  
overflow-->stack---->not matched    File 2 --> line# 1

overflow-->overflow---->matched     File 2 --> line# 2

overflow-->test---->not matched     File 2 --> line# 3

overflow-->java---->not matched     File 2 --> line# 4

overflow-->c++---->not matched  File 2 --> line# 5

overflow-->---->not matched     File 2 --> line# 6

overflow-->test---->not matched     File 2 --> line# 7

File 1 --> line# 8  
extraLine-->stack---->not matched   File 2 --> line# 1

extraLine-->overflow---->not matched    File 2 --> line# 2

extraLine-->test---->not matched    File 2 --> line# 3

extraLine-->java---->not matched    File 2 --> line# 4

extraLine-->c++---->not matched     File 2 --> line# 5

extraLine-->---->not matched    File 2 --> line# 6

extraLine-->test---->not matched    File 2 --> line# 7

得到解决方案,谢谢大家

于 2016-07-19T15:11:39.673 回答