gpt4 book ai didi

java - Java中读取结构化文件

转载 作者:行者123 更新时间:2023-12-01 18:35:00 25 4
gpt4 key购买 nike

我编写了用于读取 Java 结构化文件并提取行内容以创建对象(Person 类型)的代码。

该文件具有以下结构:例如 [personNumber]、[personName]、[personAge]

0,夏洛克·福尔摩斯,44

1,哈利·波特,17

2, jack ·斯派洛,50 岁

...

读取文件并提取信息的代码为:

        RandomAccessFile rf = new RandomAccessFile(fileName, "rw");
String line;
File myFile = new File(fileName);
scan = new Scanner(myFile);
String[] split;

//Read file
while((line = rf.readLine()) != null) {
split = scan.nextLine().split(", ");
pnumber = Integer.parseInt(split[0]);
name = split[1];
age = Integer.parseInt(split[2]);
thePerson = new Person(name, age, pnumber);
personList.addLast(thePerson);
}

这效果很好,并且 Person 对象被正确添加到我编写的单链表中。这里没有问题。

但是,该程序还应该能够读取以下格式的文本文件:

#人物

0,夏洛克·福尔摩斯,44

1,哈利·波特,17

2, jack ·斯派洛,50 岁

#狗

0,史酷比,10

1、米卢、7

2,疤痕,15

有没有办法检查正在读取的行是否包含井号 (#) 符号,在这种情况下,程序会理解它不是拆分该行,而只是开始一个新类别?这样您就可以从以下几行决定要创建哪种类型的对象,例如人或狗对象。为简单起见,类型(人、狗)的顺序始终相同,但每个类别后面的行数会有所不同。因此,我需要帮助确定一行是否包含 # 符号(表示新类别的开始),并且仅从以下行创建对象。

最佳答案

或者如果您的#始终位于字符串的开头:

编辑:

while((line = rf.readLine()) != null) {
if(line.charAt(0)=='#'){
scan.nextLine(); //use it to suit your need..
//alert the program to prepare for new type of object
//do something..
}else {
split = scan.nextLine().split(", ");
pnumber = Integer.parseInt(split[0]);
name = split[1];
age = Integer.parseInt(split[2]);
thePerson = new Person(name, age, pnumber);
personList.addLast(thePerson);
}
}

关于java - Java中读取结构化文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22393560/

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