我有一个包含应用程序数据的文本文件,我想用该数据创建对象。文本文件中的每一行都是一个对象,格式为:<name> <posX> <posY> <posY> <velX> <velY> <velZ> <mass> <radius>
。line
是String
文件中的一行。为了读取数据,我在空格上分割string
。然后我把第一个元素赋给变量name
。
String[] args = line.split("\s+");
String name = args[0];
然后我想从该行取下一个参数。我当然可以这样做:
double posX = Double.parseDouble(args[1]);
double posY = Double.parseDouble(args[2]);
double posZ = Double.parseDouble(args[3]);
double velX = Double.parseDouble(args[4]);
double velY = Double.parseDouble(args[5]);
double velZ = Double.parseDouble(args[6]);
double mass = Double.parseDouble(args[7]);
double radius = Double.parseDouble(args[8]);
然而,它看起来不太好。我想过那样做:
Map<String, Double> params = new HashMap<>();
String[] keys = {"posX", "posY", "posZ", "velX", "velY", "velZ", "mass", "radius"};
int i = 1;
for (String key : keys) {
params.put(key, Double.parseDouble(args[i]));
i++;
}
现在我不确定这是否是解决我问题的最佳方法。你知道更好的方法吗?
最终取决于您想如何处理这些数据。
如果您想创建一个类的实例来存储文件中每个条目的数据,那么当前的解析可能没有问题。您可以使用键值对,如散列映射(或其他语言中的字典),但在实际使用对象时,它的性能要比属性慢。
在解析操作中有很多行并没有什么问题,因为这被认为是样板代码(一旦定义了文件格式,就不需要再看到了)。最终,您使用循环和哈希映射的方式将编译成在您的机器上执行的大致相同数量的实际指令,那么为什么要将性能置于美观之上呢?
您可以创建一个new class of Java
,在本例中为Example
,其中将有一个构造函数(具有相同的名称),如下所示:
public class Example{
double posX, posY, posZ,velX,velY,velZ,mass,radius;
String name;
public Example(String line){
String[] args = line.split("\s+");
name = args[0];
posX = Double.parseDouble(args[1]);
posY = Double.parseDouble(args[2]);
posZ = Double.parseDouble(args[3]);
velX = Double.parseDouble(args[4]);
velY = Double.parseDouble(args[5]);
velZ = Double.parseDouble(args[6]);
mass = Double.parseDouble(args[7]);
radius = Double.parseDouble(args[8]);
}
在这个类中,您可以使用GET
和SET
方法分别从对象中恢复或修改信息。您必须为您在对象上使用的每个变量创建每个GET
和SET
方法。例如,如果您想为变量name
创建GET和SET方法,您必须这样做:
public void setName (String n) {
this.name = n;
}
public String getName (){
return name;
}
对于对象中的所有变量也是如此。
然后,从你的Main class of Java
你可以创建一个新的对象,像这样:
Example object = new Example(string);
其中string
是你想要用来创建对象的字符串。
它将使你的代码更清晰。
我希望它对你有用。