我试图找出从给定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
实例的最佳方法是什么?
答案 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);
//...
然后根据需要将它们传递给构造函数等。如果您将解析后的结果放入数组中,也可以在循环中完成。