2012-03-27 15 views
0

私がしようとしているのは次のようなものです:一定のままになる名前のリスト(約40,000)と、検索から検索に変わるテキストファイル(約10000行) 。私は、テキストファイル内の各行を検索して、名前とテキストの間に正確な文字列があるかどうかを調べ、一致と一致を返す適切な方法を見つける必要があります(下記参照)。私はこれをネストされた 'forループ'で実装しました。これは、たぶんわかっているように、非常に遅いです。私は他の人がこの同じ質問を探し求めていると確信していますが、この質問が反復的であれば謝りますが、私は相当な答えを探してこれまでには成功していません。私は(Javaを優先して)提供できる援助に感謝します。この検索をスピードアップする構造であれば、私にとっては有益なものになります(最高のものである必要はありません)。どんな助けでも心から感謝します。Javaで部分文字列を検索する

例:

names.txt(静的) アンディディック アンドリューカニンガム。 。 。 Isaac P. Newton 。 。 。 ズールー

テキスト(ダイナミック) これは、Isaac P. NewtonやZuluなどの名前が含まれていてもいなくてもよいランダムなテキストです。ここでは複数行...私は次のことを返す必要が別のズールー...

: アイザック・ニュートンP. 1 ズールー2

+3

これまでに何を試みましたか? この宿題はありますか? マップを使用して静的な名前と発生回数を格納します。 – pcalcao

+0

無関係ですが、私の姓はニュートンです。アンディと高校に行きました。だからそれがある。 –

+4

アプリケーションではluceneを使用できますが、そのためにはまずドキュメント(テキストファイル)のインデックスを作成する必要があります。その後、検索は雷の速さで行われます。 –

答えて

0

あなたは、あなたがすべての名前をロードするJavaからHashMapを使用することができますnames.txtをHashMapに追加して検索します。それはあなたのパフォーマンスを向上させるはずです。ここにいくつかのサンプルコードがあります。

 HashMap<String, Integer> textNames = new HashMap<String, Integer>(); 
     for (String name : nameFile) { 
      textNames.put(name, 0); 
     } 

     for (String line : textFile) { 
      if (textNames.containsKey(line)) { 
       textNames.put(line, textNames.get(line)+1); 
      } 
     } 

--v

0

私は、40,000名のうち、有限オートマトンを構築することをお勧め。 Javaでは、正規表現を利用してこれを行うことができます。それぞれの名前を "|"で連結して正規表現を構築するシンボル。パターンをコンパイルして、各入力行をそれにマッチさせます。

関連する問題