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



在这里比较两个.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()在外部循环的第二次迭代中返回falsewhile,因为整个第二个文件已经在外部循环的第一次迭代中读取。

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

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

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

在此之后,您可以继续将文件 1 的下一行与文件 2 的下一行进行比较。

最新更新