Java 字符串数组到对象数组
也许有一种方法可以做到这一点,但我不知道-我对此表示怀疑-但我正在尝试将字符串数组转换为对象数组。问题是:我正在从命令行读取一个文件。该文件表示以下类型的几个类,每个类都有自己的数据字段。车辆是所有跟随者的父类:车辆、汽车、美国汽车、外国汽车、卡车、自行车 将文件读入字符串数组没有问题。但是,我需要创建所有这些类型的对象,并将它们存储在Vehicle[]类型的数组中。例如,文件的一部分如下所示:Java 字符串数组到对象数组,java,arrays,Java,Arrays,也许有一种方法可以做到这一点,但我不知道-我对此表示怀疑-但我正在尝试将字符串数组转换为对象数组。问题是:我正在从命令行读取一个文件。该文件表示以下类型的几个类,每个类都有自己的数据字段。车辆是所有跟随者的父类:车辆、汽车、美国汽车、外国汽车、卡车、自行车 将文件读入字符串数组没有问题。但是,我需要创建所有这些类型的对象,并将它们存储在Vehicle[]类型的数组中。例如,文件的一部分如下所示: <node type="vehicle> <attrib
<node type="vehicle>
<attributes location="detroit" color="red" />
</node>
- 车辆
- 金斯坦利·罗宾逊
- 法院道2344号
- (221)885-7777
- stackoverflow@overflow.com
- 美国汽车
- 约翰·布尼恩
- 1010双车道
- (221)885-55643
- bgt.com
- 可兑换
- 底特律制造
- 联合工厂
顺便说一下,这是java代码。问题还不清楚。您想知道如何解析文件并使用每行上的单词来创建文件的对象吗 伪:
Vehicle_ptr myVeh = null;
for each line in file
switch line
{
case vehicle: myVeh = new Vehicle();
case American Car : myVeh = new AmericanCar();
default:
if (line.startswithaninteger && (myVeh != NULL)) myVeh.address = line;
etcetc.
}
提示:在文本文件中使用类型标识符。例如:
汽车:americancar
地址:12345BLA
etcetc
或者使用序列化程序最初将数据读入字符串数组是可以的。然后,您需要在该数组中循环,并根据每个循环的“第一行”(“Vehicle”、“American car”等),您将知道该数组中有多少后续元素属于同一个数组 类似这样的事情(我让你自己填):
inti=0;
ArrayList车辆=新ArrayList();
而(i
您可以像刚才一样读取文件,但当您读取类别类型的字符串时,请创建正确车辆类型的实例。这样看来,您将知道文件的下一个x行是该特定类型的属性,因此您将读取这些属性并在车辆实例上进行设置。然后将车辆实例添加到车辆阵列中。我将使用创建适配器的工厂模式。工厂将获取字符串(Vehicle,American Car),适配器将获取字符串数组和当前索引。适配器将负责知道读取和返回具体对象(或接口)的索引数量
现在,如果您可以控制数据的存储方式,那么您可能希望研究标准序列化,甚至JSON,以使处理更容易。在我看来,您需要一种方法来根据输入构建一组车辆类型。工厂可以考虑确定一种汽车规格从何处开始,另一种规格从何处结束。然后,它将确定汽车的字段集,并确定汽车类型。然后,它可以调用相应的构造函数,传入所有相关字段
这意味着(比如)一辆美国汽车的构造师指定了它感兴趣的所有字段。欧洲汽车制造商也会这样做。每个构造器都可以断言它所给出的内容,这样您就不会错误地创建任何汽车
工厂将负责解析和分离输入,并确定要构建的内容。每种类型的汽车的构造器只关注该汽车的信息,并执行适当的断言
工厂将保留创建的汽车列表,并在完成后返回该列表(美国/欧洲/日本)
在伪代码中:
whilst(!done) {
fields.add(fieldFromFile);
if (carSpecificationCompleted) {
type = getType(fields);
if (type == 'American') {
car = new AmericanCar(fields);
}
else if (type == 'European') {
car = new EuropeanCar(fields);
}
cars.add(car);
clearStoredFields();
}
}
您是否可以控制传入的文件?如果是这样,我是否可以建议使用XML格式化它,然后使用XML解析它?这将使你的生活更容易解析。例如,您可以按如下方式格式化所有车辆条目:
<node type="vehicle>
<attributes location="detroit" color="red" />
</node>
如果可以选择,请更改文件格式
可以通过使用序列化对象。然后,您只需存储完整的Java对象,而不必检查是否存在某些值。我将在这里使用模式而不是工厂。没有太大的区别,但是当参数像他的例子中那样变化时,会发现它更容易一些。我不确定我是否看到了这里的问题,为什么分开的线会造成问题?请原谅Pascal套管。。习惯。谢谢你,我克服了困难。现在我明白了,非常感谢:)
<node type="vehicle>
<attributes location="detroit" color="red" />
</node>