kate23131241 Ответов: 4

Как сравнить две строки из двух разных файлов в цикле


Например, моя программа должна была распечатать слова, которые не найдены в файле 2 с номером строки. Однако цикл моей программы немного испорчен.

Что я уже пробовал:

import java.util.Scanner;
import java.io.*;
public class SpellCheck{
    public static void main(String[] arg) throws FileNotFoundException{
        Scanner readPaper = new Scanner(new File("1.txt"));
  
        while(readPaper.hasNextLine()){
        String line = readPaper.next();
        Scanner linescan = new Scanner(line);
        String wordInPaper = linescan.next();
        
        
        Scanner readDict = new Scanner(new File("2.txt"));
        String wordIn = readDict.next();
        if(!wordInPaper.contains(wordIn))
          System.out.print(wordInPaper);
          } 
              }
}

4 Ответов

Рейтинг:
2

kate23131241

Как сделать так, чтобы он показывал номер строки, на которой находится ненайденное слово?
Я попробовал использовать int count = 0; затем count++; после завершения циклов. Однако это не совсем точно.
приведенный ниже код дает мне N-ю часть слова, а не количество строк.



import java.util.Scanner;
import java.io.*;

public class SpellCheck{
    public static void main(String[] arg) throws FileNotFoundException{
        String dictionary = "";
        Scanner readDict = new Scanner(new File("2.txt"));
        while(readDict.hasNext()){
            String word = readDict.next();
            dictionary = dictionary + " " + word;
       }
           int count = 0;
        Scanner readPaper = new Scanner(new File("1.txt"));
        while(readPaper.hasNextLine()){
          String line = readPaper.next();
                count++;
          Scanner linescan = new Scanner(line);
        
          String wordInPaper = linescan.next();
          
            
           if(!dictionary.contains(wordInPaper)) {
            
     System.out.println("Line: " + count + " "  + wordInPaper);
           
        
        }
     
    }
    
    
    }

}


Richard MacCutchan

Смотрите мой комментарий выше. Вам нужно будет читать строки по одной за раз и держать где-то заметку о том, что это за номер строки.

Рейтинг:
13

Richard MacCutchan

Попробовать это:

import java.util.Scanner;
import java.io.*;

public class SpellCheck{
    public static void main(String[] arg) throws FileNotFoundException{
        String dictionary = "";
        Scanner readDict = new Scanner(new File("2.txt"));
        // Build the dictionary list from file 2
        while(readDict.hasNext()){
            String word = readDict.next();
            dictionary = dictionary + " " + word;
        }
        System.out.println("Dict: " + dictionary);
        
        Scanner readPaper = new Scanner(new File("1.txt"));
        while(readPaper.hasNext()){
            String wordInPaper = readPaper.next();
            System.out.println("wordInPaper: " + wordInPaper);
            if(!dictionary.contains(wordInPaper))
            	System.out.println("Not found: " + wordInPaper);
        }
    }
}


kate23131241

Спасибо, Ричард, я пробежал его, и он выглядит великолепно.

У меня только один вопрос
что делает эта часть?
словарь = словарь + "" + слово;

Richard MacCutchan

Начиная с пустой строки, сканер считывает следующий маркер и добавляет его вместе с пробелом в конец. Таким образом, вы получаете единственную строку, содержащую все слова, например "он пошел домой". Ваши текстовые файлы содержат только одну строку, но я написал ее для обработки любого числа. Вероятно, это можно было бы сделать, просто добавив каждую строку одновременно.

Рейтинг:
1

KarstenK

Отказ от использования массива, словаря или другого контейнера плохо сказывается на производительности. А как насчет связанного списка или какого-нибудь вектора? Результатом вашей работы также должна быть альтернатива вроде словаря и сравнения производительности

Если это действительно невозможно, то прочтите второй файл в a один строковый объект и найдите каждое слово файла 1 за один шаг. Я знаю, что это плохое решение, но оно без массива :-O


Рейтинг:
0

Richard MacCutchan

Считайте все слова файла 1 в массив или список некоторого типа. Считайте все слова из файла 2 в отдельный массив. Используйте цикл или итератор, чтобы проверить каждое слово из первого списка, чтобы увидеть, есть ли оно во втором. Если слово не найдено, то запишите его.


kate23131241

Проблема в этой программе заключается в том, что я не могу использовать ни массив, ни список массивов. Массив сделал бы это намного проще, но я не могу его использовать.

Richard MacCutchan

Это немного усложняет дело. Но вам все равно нужен способ доступа к обоим спискам слов, чтобы найти те, которые отсутствуют. Что именно происходит, когда вы запускаете свой код?

kate23131241

Когда вы запускаете код, он должен печатать из System.out.println("Line:" word + count);

Например, файл имеет строки: он пошел домой
во втором файле есть такие слова: обожаю, когда он вернулся
Программа напечатает слово: home, потому что оно не было найдено во втором файле

Richard MacCutchan

Я думаю, что вы должны посмотреть на логику, которую я предложил выше, и попытаться построить наборы слов. Сначала получите все слова из файла 2. Затем, читая каждое слово в файле 1, сверьте его со списком из файла 2 и распечатайте все, что не найдено.