Рейтинг:
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
Начиная с пустой строки, сканер считывает следующий маркер и добавляет его вместе с пробелом в конец. Таким образом, вы получаете единственную строку, содержащую все слова, например "он пошел домой". Ваши текстовые файлы содержат только одну строку, но я написал ее для обработки любого числа. Вероятно, это можно было бы сделать, просто добавив каждую строку одновременно.
Рейтинг:
0
Richard MacCutchan
Считайте все слова файла 1 в массив или список некоторого типа. Считайте все слова из файла 2 в отдельный массив. Используйте цикл или итератор, чтобы проверить каждое слово из первого списка, чтобы увидеть, есть ли оно во втором. Если слово не найдено, то запишите его.
kate23131241
Проблема в этой программе заключается в том, что я не могу использовать ни массив, ни список массивов. Массив сделал бы это намного проще, но я не могу его использовать.
Richard MacCutchan
Это немного усложняет дело. Но вам все равно нужен способ доступа к обоим спискам слов, чтобы найти те, которые отсутствуют. Что именно происходит, когда вы запускаете свой код?
kate23131241
Когда вы запускаете код, он должен печатать из System.out.println("Line:" word + count);
Например, файл имеет строки: он пошел домой
во втором файле есть такие слова: обожаю, когда он вернулся
Программа напечатает слово: home, потому что оно не было найдено во втором файле
Richard MacCutchan
Я думаю, что вы должны посмотреть на логику, которую я предложил выше, и попытаться построить наборы слов. Сначала получите все слова из файла 2. Затем, читая каждое слово в файле 1, сверьте его со списком из файла 2 и распечатайте все, что не найдено.