Я разрабатываю программу, которая читает размер файла txt, количество слов, чисел и символов, которые он содержит, и возможность поиска файла для данной строки.Найдите строку и отобразите номер строки и строку непосредственно?
Например.
текстовый файл имеет
Там когда-то была земля
Это не земля больше не существует.
Эта земля была ...
Если бы я хотел, чтобы искать «землю» это список будет все 3 линии.
Методы я создал для поиска файла и найти строку являются:
public String searchWord(String key) throws Exception {
LineNumberReader lnr = new LineNumberReader(new FileReader(f));
String line = null;
line = recursiveSearch(lnr.readLine(), key, lnr);
return line;
}
public String recursiveSearch(String currentLineText, String key, LineNumberReader lnr)
throws Exception {
if (currentLineText != null) {
String lCase = currentLineText.toLowerCase();
if (lCase.contains(key.toLowerCase())) {
return ("Line " + lnr.getLineNumber() + ": " + currentLineText
+ "\n");
}
}
return recursiveSearch(lnr.readLine(), key, lnr);
}
Программа действительно поиск по файлам правильно, так что я должен считать слово для поиска работает правильно. Однако, если бы я набрал «землю», она вернула бы «Когда-то была земля», а не все 3 линии.
Если бы я набрал «дольше», он вернул бы вторую строку правильно. Какие направления вы можете дать мне, чтобы показать все необходимые строки?
EDIT
Я пошел с советами MadProgrammer, и я считаю, что он прав. Вам понадобится список. Однако после того, как я повторил код
public List<String> searchWord(String key) throws Exception {
LineNumberReader lnr = new LineNumberReader(new FileReader(f));
return recursiveSearch(lnr.readLine(), key, lnr);
}
public List<String> recursiveSearch(String currentLineText, String key, LineNumberReader lnr)
throws Exception {
List<String> resultList = new ArrayList<String>();
if (currentLineText != null) {
String lCase = currentLineText.toLowerCase();
if (lCase.contains(key.toLowerCase())) {
String result = ("Line " + lnr.getLineNumber() + ": " + currentLineText
+ "\n");
resultList.add(result);
}
}
String nextLine = lnr.readLine();
if (nextLine != null) {
resultList.addAll(recursiveSearch(nextLine, key, lnr));
}
return resultList;
}
Испытательный класс появился с ошибкой. Программа не нашла «searchMethod»
f.selectFile();
if (f.exists()) {
try {
String input = JOptionPane.showInputDialog("Enter a word ");
for (String line : searchWord(input)) {
display(line);
}
Я, вероятно, нужно переписать часть тестового класса, или искать дополнительный пример списков, чтобы получить лучшее понимание.
EDIT 2
Так что я просто послал два метода в тестовом классе и переименовал их с «Static» Все работает. Я предпочитаю не делать этого, но теперь мне просто нужно, чтобы FileReader выбирал файл по входам пользователя, должен быть легким для меня. Спасибо, парни.
Параметр 'Возвращение ("Линия" + lnr.getLineNumber() + ":" + currentLineText + "\ п");' будет короткое замыкание ваш рекурсивный поиск. Попробуйте добавить результаты в «Список» и верните «Список» в конце метода, убедившись, что вы используете что-то вроде «list.addAll (recursiveSearch (lnr.readLine(), key, lnr)); выберите другие результаты;) – MadProgrammer
загрузите файл во временную таблицу db и используйте SQL для поиска. Затем вы можете повторно использовать данные для других поисков. –
@ScaryWombat На самом деле SQL не нужен здесь. – user1803551