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

时间:2017-11-30 12:40:01

标签: java string while-loop iteration nested-loops

比较两个.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);      
                }
        }
  }             

3 个答案:

答案 0 :(得分:4)

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

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()在外部false循环的第二次迭代中返回while,因为在外循环的第一次迭代中已经读取了整个第二个文件。

答案 1 :(得分:1)

第二个文件的

Scanner在外部的第一个循环期间读取整个文件并且到达文件的末尾(没有什么可以读取下一个外部while循环)。您应该在外部while循环的主体中创建第二个Scanner,以使其从外部循环的每个开始处开始读取所选择的第二个文件。

答案 2 :(得分:0)

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

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

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