Поиск содержимого файлов с помощью Java? - PullRequest
2 голосов
/ 15 декабря 2010

Я хотел бы написать приложение на Java, которое позволяет мне открывать файл (txt) и, используя ввод пользователя, искать все экземпляры определенного слова или строки.

Поскольку здесь, вероятно, есть более опытные программисты, я хотел бы дать несколько советов о том, как создать такой инструмент. Как бы вы занялись созданием базового инструмента текстового поиска?

Я играл с некоторыми классами Java, такими как File, FileOutputStream, FileInputStream, InputStreamReader, OutputStreamReader, FileReader, StreamTokenizer и хотел бы узнать оптимальный способ открытия и поиска файла с использованием Java?

Спасибо за любой вклад, который вы можете иметь, Des.

Ответы [ 5 ]

2 голосов
/ 15 декабря 2010

Использование File с Scanner и StringBuilder должно дать вам хорошее начало в этой теме.

1 голос
/ 15 декабря 2010

Что вы хотите сделать с результатами поиска?Это просто посчитать количество вхождений данного слова или фразы?Что делать, если пользователь вводит «строку», а файл содержит «строки»;должен ли быть матч?Вам нужно разрешить многократный поиск по одному и тому же файлу?

В любом случае, дело в том, что полнотекстовый поиск - очень сложная тема.Но есть помощь ;-).Я предлагаю вам создать индекс в памяти файла для поиска с использованием проекта с открытым исходным кодом Lucene .Это супер быстро и имеет ответы на все вышеупомянутые вопросы и многое другое. Здесь - код для создания этого индекса в памяти.Создав этот индекс, вы можете выполнить сложные поиски

1 голос
/ 15 декабря 2010

Я бы порекомендовал использовать какую-то хеш-таблицу. Если ваши данные не меняются (это просто обычный поиск статического документа или это часть текстового редактора?), То Perfect Hashing даст вам поиск в постоянном времени. Это ОЧЕНЬ быстро. Если нет, то, возможно, попробуйте хэширование с кукушкой или просто линейное зондирование.

Я бы прочитал в файле, используя Scanner или любой буферизованный ридер, хэшируя каждое слово в качестве ключа к любым дополнительным данным, которые вы хотите (например, номера строк / индексы слов всех вхождений), затем вы можете запросить хеш-таблицу супер быстро.

Редактировать : Вот Java-реализация Perfect хэширования для строк: http://blog.tomgibara.com/post/438939809/minimal-perfect-hash-strings

0 голосов
/ 15 декабря 2010

Чтобы иметь скорость, я бы использовал BufferedReader. Примерно так:

BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(givenFile)));

BufferedReader - самый эффективный способ чтения файла, ИМХО.

Существует существующий инструмент, созданный Китом Фенске и названный FileSearch , который существует. Вы можете скачать исходники и посмотреть на них:)

0 голосов
/ 15 декабря 2010

Вы можете прочитать в текстовом файле строку и затем вызвать метод split (). Смотрите документацию. Это вернет массив строк. После этого вы можете выполнить поиск (т.е. бинарный поиск) по массиву и продолжить его, удаляя найденное слово и сохраняя местоположение, пока все экземпляры не будут найдены. После этого у вас будут все местоположения строки поиска в документе.

Вот статья в Википедии о бинарном поиске, если она вам может понадобиться: http://en.m.wikipedia.org/wiki/Binary_search_algorithm?wasRedirected=true

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...