単一の長い行を含む US-ASCII のテキスト ファイルがあります。アクセスする必要があるテキスト項目は、次のようにさまざまな数のスペースで区切られています。
metadata1 attrib1 metadata2 attrib2 attrib2a trackstart attrib1 attrib2 trackstart attrib1 atrib2 attrib3
ファイルには最大 99 個の「トラック」エントリを含めることができ、ほとんどメモリを消費しません。
私は何をする必要がありますか
これらのエントリを、反復処理、値へのアクセス、アイテムのカウントが可能なメモリ内構造に抽出する必要があります。たとえば、「トラック」の数を取得する必要があります (上記の例では「トラック開始」をカウントし、各トラックの属性をobject.track1.attribute1
.
私が試したこと
スキャナーを使用してファイルを読み取り、テキスト エントリをステップ実行しました。これはうまくいくようです。次に、ネストされた HashMaps を次のように作成しました。
HashMap<String, String> overallMap = new HashMap<String, String>(); // contains the tracks map and some other metadata
HashMap<String, Map> tracks = new HashMap<String, Map>(); // contains a map of all tracks
HashMap<String, String> track = new HashMap<String, String>(); // contains an individual track
しかし、問題は (私が思うに) HashMaps ではキーをカウントできないことです (つまり、テキスト ファイル内の「トラック」の数を取得できません)。このデータ構造で他の問題に遭遇すると思います。
質問
- この場合、スキャナはファイルを読み込んで操作するための最良の方法ですか?
- どのメモリ内データ構造を選択すればよいですか? トラック リストを作成し、トラックを数え、この構造内の個々の属性にアクセスするにはどうすればよいですか?