从String.valueOf(Object obj)的值创建一个新的Shape

时间:2014-08-11 20:49:42

标签: java string javafx javafx-2 javafx-8

我试图找出从给定Shape创建新String实例的最有效方法,例如, String.valueOf(Object obj)参数的Shape静态方法返回的值。我们说我创建了一个Circle,并且我添加了一些额外的功能:

Circle circle = new Circle(10, 10, 10, Color.BLACK);
circle.setStroke(Color.RED);
circle.setStrokeWidth(2);

现在,我正在写String.valueOf(circle)返回的值,即:

Circle[centerX=10.0, centerY=10.0, radius=10.0, 
fill=0x000000ff, stroke=0xff0000ff, strokeWidth=2.0]

...在*.txt文件中,或类似的内容。接下来,我阅读了这个*.txt文件,并将其内容放在新的String中,说:

String stringCircle = "Circle[centerX=10.0, centerY=10.0, radius=10.0, "
                + "fill=0x000000ff, stroke=0xff0000ff, strokeWidth=2.0]";

Circle值创建新stringCircle实例的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

考虑重写Circle的toString方法以返回易于读取的值字符串,然后编写构造函数public Circle(String definition)以相应地读取该字符串。

字符串可能类似于10.0 10.0 10.0 0x000000ff 0xff0000ff 2.0 由于您已经实现了toString和构造函数,因此您可以假设参数顺序始终相同,然后使用带有空格作为分隔符的字符串标记生成器来轻松分配值。

答案 1 :(得分:0)

你可以通过解析stringCircle字符串来获取每个值,如下所示:

int newStart = stringCircle.indexOf(",");
double centerX = Double.parseDouble(stringCircle.substring(stringCircle.indexOf("=") + 1, newStart));
stringCircle = stringCircle.substring(newStart + 1);

newStart = stringCircle.indexOf(",");
double centerY = Double.parseDouble(stringCircle.substring(stringCircle.indexOf("=") + 1, newStart));
stringCircle = stringCircle.substring(newStart + 1);
//...
newStart = stringCircle.indexOf(",");
int stroke = Integer.parseInt(stringCircle.substring(stringCircle.indexOf("=") + 1, newStart));
stringCircle = stringCircle.substring(newStart + 1);
//...

然后根据需要将它们传递给构造函数等。如果您将解析后的结果放入数组中,也可以在循环中完成。