2010-12-14 7 views
2

私は、ファイル(txt)を開き、ユーザーの入力を使用して、特定の単語または文字列のすべてのインスタンスを検索できるアプリケーションをJavaで作成したいと考えています。Javaを使用したファイルコンテンツの検索?

おそらくもっと経験豊かなプログラマーがいるので、私はそのようなツールを作成する方法についていくつかアドバイスをしたいと思います。どのように基本的なテキスト検索ツールを作成するつもりですか?

File、FileOutputStream、FileInputStream、InputStreamReader、OutputStreamReader、FileReader、StreamTokenizerなどのJavaクラスで遊んでいて、Javaを使用してファイルを開いて検索する最適な方法を知りたいですか?

入力ありがとうございました。 Des。

+0

この課題はありますか?もしそうなら、質問を編集して、あなたがこれまでに成し遂げたことを含めてください。そして改善するのを助けることができます。 :) –

答えて

2

ScannerStringBuilderを使用すると、そのトピックの開始が適切になるはずです。

0

テキストファイルを文字列に読み込んだ後、split()メソッドを呼び出すことができます。ドキュメントを参照してください。これは文字列の配列を返します。この後、配列の検索(つまりバイナリ検索)を実行して、すべてのインスタンスが見つかるまで、見つけた単語を削除して保存することができます。その後、文書内に検索文字列のすべての場所が表示されます。ここで

は、あなたがそれを必要とするかもしれない場合のバイナリ検索にWikipediaの記事です: http://en.m.wikipedia.org/wiki/Binary_search_algorithm?wasRedirected=true

1

私はいくつかの種類のハッシュテーブルを使用することをお勧めします。あなたのデータが変更されていない場合(静的な文書の単なる基本的な検索ですか、それともテキストエディタの一部ですか?)、Perfect Hashingは一定の時間の検索を行います。これはVERYです。もしそうでなければ、Cuckooのハッシングを試してみてください。

Scannerまたは任意のバッファリングされたリーダーを使用してファイルを読み込み、任意の追加データ(すべての出現の行番号/単語インデックスなど)のキーとして各単語をハッシュして、ハッシュテーブルスーパー速い。

編集:ここでは、文字列のハッシングパーフェクトのJava実装である:http://blog.tomgibara.com/post/438939809/minimal-perfect-hash-strings

0

スピードを持っているために、私はBufferedReaderのを使用します。このようなもの:

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

BufferedReaderは、ファイルを読み込む最も効率的な方法です。

Keith Fenskeによって作成され、存在するFileSearchという名前の既存のツールがあります。あなたはソースをダウンロードして見ることができます:)

+0

なぜFileReaderの代わりにInputStreamReaderでラップされたFileInputStreamを使用しましたか? – jzd

1

検索結果で何をしたいですか?与えられた単語やフレーズの出現回数を数えるだけですか?ユーザーが "行"を入力し、ファイルに "行"が含まれている場合はどうなりますか?一致がなければなりませんか?同じファイルに対して複数の検索を許可する必要がありますか?

とにかく、フルテキスト検索は非常に複雑な問題です。しかし、助けがあります;-)。あなたのための私の提案は、オープンソースLuceneプロジェクトを使用して検索するファイルののメモリ内インデックスを作成することです。それは超高速であり、上記のすべての質問に答えています。Hereは、そのメモリ内インデックスを作成するためのコードです。そのインデックスを作成したら、実行できますsophisticated searches

関連する問題