我有一个US-ASCII文本文件,其中包含一个单独的长行。我需要访问的文本项是由不同数量的空格分隔,就像这样:使用Java扫描文本文件
metadata1 attrib1 metadata2 attrib2 attrib2a trackstart attrib1 attrib2 trackstart attrib1 atrib2 attrib3
该文件可以有一个最大的99“轨道”的条目,并会采取很少的内存。
我需要做的
我要提取这些条目到内存中的结构,我可以遍历,访问值,并计算项目。举例来说,我需要通过计算“trackstart在上面的例子中得到“轨道”(的数量,也可以增加每个轨道属性为结构像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
但问题是,(我认为)包含HashMap赢得”让我算上钥匙(所以我不能在我的文本文件中获得“轨道”数量乐)。我怀疑我会遇到这个数据结构的其他问题。
问题
- 在这种情况下,是扫描仪中读取和操作文件的最好方法?
- 我应该选择什么内存数据结构?我如何建立曲目列表,计算曲目并访问此结构中的各个属性?
首先,你可以用'Map.size()'给你钥匙的数量在'Map'。其次,如果你正在使用'Map'的'Map's等,那么这通常是“Object Phobia”的标志。事实上,你有'Track'的概念意味着你应该有一个'Track'对象来存储它的属性。 –
因此每条曲目都有属性和元数据对象具有属性和曲目,是否正确? –
@AnkitRustagi有一些'元数据'键具有不同数量的值,它们位于整个数据结构的根部,但它主要由'trackstart'分隔的'track'组成,并且还包含不同数量的值。 'metedata'对象不包含音轨。谢谢! – Fiona