我有一个包含应用程序数据的文本文件,我想用这些数据创建对象。文本文件中的每一行都是一个格式为<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++;
}
现在我不确定这是否是解决我问题的最佳方法。你知道更好的方法吗?
答案 0 :(得分:1)
最终你想要对数据做些什么。
如果要创建一个类的实例来存储文件中每个条目的数据,那么当前的解析可能就好了。您可以使用键值对(如哈希映射(或其他语言中的字典))来执行此操作,但在实际使用对象时,它的性能要比属性慢。
在解析操作中有很多行是没有错的,因为无论如何它都被视为样板代码(一旦定义文件格式就不需要再次看到)。最终你使用循环和哈希映射的方式可以编译为在你的机器上执行的大致相同数量的实际指令,那么为什么要将性能放在美学上呢?
答案 1 :(得分:0)
您可以创建一个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
是您要用来创建对象的字符串。
它会使您的代码更清晰。
我希望它对你有用。