2015-06-04 4 views
0

Я пытаюсь реализовать некоторый код для сравнения строк из двух текстовых файлов и определить, являются ли они равными или разными. Однако моя логика, похоже, не работает над оператором while, потому что я получаю сообщение об ошибке, когда в одном из текстовых файлов есть дополнительная строка. Любые идеи, как я могу изменить это, чтобы учесть дополнительные строки?Чтение строк файла и сравнение

try { 
      final File textfile1 = new File("Text1.txt"); 
      final File textfile2 = new File("Text2.txt"); 
      Scanner text1 = new Scanner(textfile1); 
      Scanner text2 = new Scanner(textfile2); 

      while (text1.hasNext() || text2.hasNext()) 

      { 
       line1 = text1.nextLine(); 
       line2 = text2.nextLine(); 

       if (line1.equals(line2)) 
        System.out.println("The lines are equal"); 
       else 
        System.out.println("\"" + line1 + "\" does not equal \"" + line2 + "\""); 

      } 

      text1.close(); 
      text2.close(); 
     } catch (FileNotFoundException ex) { 
+0

thats, потому что он пытается скомпоновать его с неопределенным или нулевым значением – Nakib

+0

Какая ошибка вы получаете? Возможно, это будет пустое или нулевое условие проверки ошибки. –

ответ

1

Ну суть этого является оценка while (text1.hasNext() || text2.hasNext()), которая просто означает, что один из двух потребностей, чтобы не быть в то конец файла, а затем сделать вызов для nextLine на обоих. Проблема там снова одна из двух, возможно, дошла до конца.

Вы можете переключиться на использование && вместо ||, чтобы гарантировать, что ни один из них не находится в конце, ни сделайте оценку для каждого файла перед поиском.

Например ...

while (text1.hasNext() || text2.hasNext()) { 
    line1 = null; line2 = null; 
    if (text1.hasNext()) line1 = text1.nextLine(); 
    if (text2.hasNext()) line2 = text2.nextLine(); 

... 
0

Проблема заключается в том, что ваш код читает оба текста, имеют ли они больше содержания или нет. Вы должны читать тексты только в том случае, если у них есть контент, а затем проверьте, является ли он длиннее другого.

while (text1.hasNext() && text2.hasNext()){ 
    line1 = text1.nextLine(); 
    line2 = text2.nextLine(); 

    if (line1.equals(line2)) 
     System.out.println("The lines are equal"); 
    else 
     System.out.println("\"" + line1 + "\" does not equal \"" + line2 + "\""); 
} 

if (text1.hasNext()) 
    System.out.println("text 1 has more lines"); 
if (text2.hasNext()) 
    System.out.println("text 2 has more lines"); 
+0

Это будет более полезно для будущих пользователей, если вы добавите текст, объясняющий, что делает ваш код, и как он решает исходную проблему. – APH

0

Я думаю, что проблема в логике запускается во время цикла. Запустите цикл while и верните строки в цикле, затем сравните текст строк.

try { 
    final File textfile1 = new File("Text1.txt"); 
    final File textfile2 = new File("Text2.txt"); 
    Scanner text1 = new Scanner(textfile1); 
    Scanner text2 = new Scanner(textfile2); 
    bool flag = true; 

    while (flag) 
    { 
     if(!text1.eof() || !text2.eof() 
     { 
      line1 = text1.nextLine(); 
      line2 = text2.nextLine(); 

      if (line1.equals(line2)) 
       System.out.println("The lines are equal"); 
      else 
       System.out.println("\"" + line1 + "\" does not equal \"" + line2 + "\""); 
     } else { 
      flag = false; 
     } 
    } 

    text1.close(); 
    text2.close(); 
} 
catch (FileNotFoundException ex) { 
}