Java 字符串数组到对象数组

Java 字符串数组到对象数组,java,arrays,Java,Arrays,也许有一种方法可以做到这一点,但我不知道-我对此表示怀疑-但我正在尝试将字符串数组转换为对象数组。问题是:我正在从命令行读取一个文件。该文件表示以下类型的几个类,每个类都有自己的数据字段。车辆是所有跟随者的父类:车辆、汽车、美国汽车、外国汽车、卡车、自行车 将文件读入字符串数组没有问题。但是,我需要创建所有这些类型的对象,并将它们存储在Vehicle[]类型的数组中。例如,文件的一部分如下所示: <node type="vehicle> <attrib

也许有一种方法可以做到这一点,但我不知道-我对此表示怀疑-但我正在尝试将字符串数组转换为对象数组。问题是:我正在从命令行读取一个文件。该文件表示以下类型的几个类,每个类都有自己的数据字段。车辆是所有跟随者的父类:车辆、汽车、美国汽车、外国汽车、卡车、自行车

将文件读入字符串数组没有问题。但是,我需要创建所有这些类型的对象,并将它们存储在Vehicle[]类型的数组中。例如,文件的一部分如下所示:



    <node type="vehicle>
       <attributes location="detroit" color="red" />
    </node>
  • 车辆
  • 金斯坦利·罗宾逊
  • 法院道2344号
  • (221)885-7777
  • stackoverflow@overflow.com
  • 美国汽车
  • 约翰·布尼恩
  • 1010双车道
  • (221)885-55643
  • bgt.com
  • 可兑换
  • 底特律制造
  • 联合工厂
其中类类型是第一行,后跟所有者的姓名、地址、电话号码、电子邮件地址……每种类型都有特定的字段。所以外国汽车不是底特律制造的。这些字段中的每一个都显示在文件中的单独一行上。我所做的就是把整个文件读入一个字符串数组。但是,我需要在字符串数组中找到我的类型,创建这些类型的对象,并将它们存储在Vehicle数组中。我的主要问题是,每个数据字段都在单独的一行上。我应该如何处理这个问题?
顺便说一下,这是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>