我有一個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