Java 从String.valueOf(Object obj)的值创建一个新形状

Java 从String.valueOf(Object obj)的值创建一个新形状,java,string,javafx,javafx-2,javafx-8,Java,String,Javafx,Javafx 2,Javafx 8,我正在试图找出从给定的String创建新Shape实例的最有效方法,例如String.valueOf(Object obj)静态方法为Shape参数返回的值。比如说,我创建了一个圆圈,并为其添加了一些附加功能: Circle circle = new Circle(10, 10, 10, Color.BLACK); circle.setStroke(Color.RED); circle.setStrokeWidth(2); 现在,我正在编写String.valueOf(circle)返回的值,

我正在试图找出从给定的
String
创建新
Shape
实例的最有效方法,例如
String.valueOf(Object obj)
静态方法为
Shape
参数返回的值。比如说,我创建了一个
圆圈
,并为其添加了一些附加功能:

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 stringCircle = "Circle[centerX=10.0, centerY=10.0, radius=10.0, "
                + "fill=0x000000ff, stroke=0xff0000ff, strokeWidth=2.0]";

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

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

字符串可能类似于
10.0 10.0 10.0 0x000000ff 0xff0000ff 2.0

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

您可以通过解析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);
//...

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

+1这似乎是解决此问题的一种非常有效的方法。但我还在找。