gpt4 book ai didi

java - 解析具有嵌套结构的纯文本文件

转载 作者:行者123 更新时间:2023-11-30 07:05:09 27 4
gpt4 key购买 nike

我正在尝试将纯文本文件解析为 ObjectsArrayList。问题是它有某种嵌套结构。数据如下所示:

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 对象,其中包含一个包含所有可能同义词的列表。

我创建了一个 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”行丢失了。

有人能给我指出正确的方向吗?

最佳答案

您已经认识到的问题是您从读者那里阅读了两次。我会只读一次并立即拆分,检查第一个标记是 S 表示主要内容还是 SS 表示先前阅读的主要内容的同义词。为此,您需要将 Substance substance; 变量置于循环之外。

String line;
Substance actualSubstance = null;
while((line = br.readLine()) != null) {
String[] columns = line.split("\t");
if (columns[0].equals("S")) {
actualSubstance = new Substance();
// parse main substance
} else if (columns[0].equals("SS")) {
if(actualSubstance != null) {
Synonym synonym = new Synonym();
// parse synonim substance and add to actual main substance
actualSubstance.addSynonym(synonym);
} else {
// bad format of the input file -> handle accordingly
}
} else {
// junk
}
}

关于java - 解析具有嵌套结构的纯文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27045578/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com