我試圖將純文本文件解析爲Objects
的ArrayList
。問題是它有某種嵌套結構。數據看起來像這樣:使用嵌套結構解析純文本文件
S 183166621 75783-29-8 0 -1 0 0 0 0
SS 183166621 0 DE Siloxane und Silikone, di-Me, polymers mit bor oxid (B2O3)
SS 183166621 0 EN Siloxanes and Silicones, di-Me, polymers with boron oxide (B2O3)
S 183166624 3087-36-3 221-410-8 0 -1 0 0 0 0
SS 183166624 0 DE Titan(4+)ethanolat
SS 183166624 0 EN Ethanol, titanium(4+) salt
所以有一個以「S」開頭的行代表某種物質。每個「S」行後面都有多個「SS」行,其中包含不同語言的相應物質的同義詞。同義詞的數量不固定。有的只有2個,有的有3,4個或更多。
我的想法是創建一個Substance Object
其中包含所有可能的同義詞列表。
我創建了一個BufferedReader
並嘗試通過線
String line;
while((line = br.readLine()) != null) {
if (line.startsWith("S\t")) {
Substance substance = new Substance();
String[] columns = line.split("\t");
// Parse columns and store them in substance Object
}
}
解析文件行改爲我想開始第二內環解析開始「SS」的所有行的同義詞。當到達另一個「S」行時,內循環停止。
String line;
while((line = br.readLine()) != null) {
if (line.startsWith("S\t")) {
Substance substance = new Substance();
String[] columns = line.split("\t");
// Parse columns and store them in substance Object
while((line = br.readLine()) != null) {
if (line.startsWith("SS\t")) {
Synonym synonym = new Synonym();
// Parse columns and store them in synonym Object
// Add synonym to List of Synonyms of Substance
substance.addSynonym(synonym);
}
else {
break;
}
}
}
}
問題與此是,在離開內循環後外環執行另一readline()
所以實際的「S」 - 行丟失。
難道有人指着我正確的方向嗎?