我有一个 US-ASCII 文本文件,其中包含一条长行。我需要访问的文本项由不同数量的空格分隔,如下所示:
metadata1 attrib1 metadata2 attrib2 attrib2a trackstart attrib1 attrib2 trackstart attrib1 atrib2 attrib3
该文件最多可以有 99 个“曲目”条目,并且占用的内存很少。
我需要做什么
我必须将这些条目提取到一个内存结构中,我可以对其进行迭代、访问值和计数项目。例如,我需要获取“轨道”的数量(通过计算上面示例中的“轨道开始”,并将每个轨道的属性添加到结构中,例如object.track1.attribute1
.
我试过的
我使用扫描仪读取文件并逐步浏览文本条目。这似乎工作正常。然后我创建了嵌套的 HashMap,例如:
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 不会让我计算键(所以我不能,比如说,在我的文本文件中获取“轨道”的数量)。我怀疑我会遇到这个数据结构的其他问题。
问题
- 在这种情况下,扫描仪是读取和操作文件的最佳方式吗?
- 我应该选择什么内存数据结构?如何建立曲目列表、计算曲目并访问此结构中的各个属性?