嵌套循环的第一个 while 循环只迭代一次

The first while loop of the nested loop iterates only once

在此处比较两个 .txt 文件,如果第二个文件中的任何字符串与第一个文件匹配或重复,则得出第一个文件的行号。

在代码中,第一个 while 循环只迭代一次。

 Scanner scanner = new Scanner(firstFile);
 Scanner scanner1 =new Scanner(secondFile);
 int lineNum = 0;
 while (scanner.hasNextLine())  
  {
        String line = scanner.nextLine();
        lineNum++;
        while (scanner1.hasNextLine()) 
        {
               String line1 = scanner1.nextLine();
               if(line.contains(line1)) 
                { 
                  System.out.println("Ignore/Review line number: "+lineNum);      
                }
        }
  }             

您必须在外部 while 循环内创建第二个文件的 Scanner

Scanner scanner = new Scanner(firstFile);
int lineNum = 0;
while (scanner.hasNextLine()) {
    String line = scanner.nextLine();
    lineNum++;
    Scanner scanner1 =new Scanner(secondFile);
    while (scanner1.hasNextLine()) {
        String line1 = scanner1.nextLine();
        if(line.contains(line1)) { 
            System.out.println("Ignore/Review line number: "+lineNum);      
        }
    }
} 

否则 scanner1.hasNextLine() returns false 在外部 while 循环的第二次迭代中,因为整个第二个文件已经在外部 while 循环的第一次迭代中读取循环。

这个问题与第二个 while 循环永远不会被取消有关。因此,当您在文件 2 中找到匹配的行时,您继续将文件 1 的行与文件 2 中的所有其他行进行比较。您可能想要的是这样的:

if(line.contains(line1)) 
{ 
    System.out.println("Ignore/Review line number: "+lineNum);
    break;
}

之后,您可以继续比较文件 1 的下一行和文件 2 的下一行。

第二个文件的

Scanner 在外部文件的第一个循环期间读取整个文件 amd 到达文件末尾(下一个外部 while 循环没有可读取的内容)。您应该在外部 while 循环的主体中创建第二个 Scanner 以使其在每次外部循环开始时从头开始读取所选的第二个文件。