【发布时间】:2010-03-06 22:56:53
【问题描述】:
为了在我的应用程序中保存图形对象的颜色属性,我将此颜色的字符串表示形式保存在数据文件中。
例如,对于红色,我保存:java.awt.Color[r=255,g=0,b=0]。
如何将此字符串表示形式转换为颜色,以便在加载数据文件后再次使用它?
谢谢。
【问题讨论】:
为了在我的应用程序中保存图形对象的颜色属性,我将此颜色的字符串表示形式保存在数据文件中。
例如,对于红色,我保存:java.awt.Color[r=255,g=0,b=0]。
如何将此字符串表示形式转换为颜色,以便在加载数据文件后再次使用它?
谢谢。
【问题讨论】:
您可能希望使用getRGB() 而不是toString()。你可以打电话
String colorS = Integer.toString(myColor.getRGB());
然后就可以调用了
Color c = new Color(Integer.parseInt(colorS));
【讨论】:
Stephan 的回答帮助了我。但是,我发现我需要在语法中添加“true”才能恢复颜色。
// convert to string
String colorS = Integer.toString(myColor.getRGB());
// restore colour from string
Color c = new Color(Integer.parseInt(colorS), true);
【讨论】:
使用toString()“可能因实现而异。”而是保存String.valueOf(color.getRGB()) 以供以后重建。
【讨论】:
来自Color#toString的文档
返回此
Color的字符串表示形式。 此方法仅用于调试目的。返回字符串的内容和格式可能因实现而异。返回的字符串可能为空,但不能为null。
换句话说,我不会依赖能够将字符串反向转换为Color。但是,如果您坚持这样做,您可以尝试从字符串中解析出数字,并希望它能在没有保证的情况下工作。
这样的东西现在似乎对我有用:
Scanner sc = new Scanner("java.awt.Color[r=1,g=2,b=3]");
sc.useDelimiter("\\D+");
Color color = new Color(sc.nextInt(), sc.nextInt(), sc.nextInt());
不过,我不建议实际这样做。
【讨论】:
我建议您改用 java 的内置序列化技术。 (我注意到 Color 实现了 Serializable。)
【讨论】:
使用 getRGB() 方法获取 Color 的 int 表示,然后保存 int 值并使用该值重新创建 Color。无需解析。
【讨论】:
最简单的事情是重新考虑存储字符串表示的方式。去掉所有的标签,只将红色存储为字符串“0xFF0000”。然后,您可以轻松地解析该字符串以获取 rgb 的单个值,并将其发送到 Color 构造函数。
另一种方法是解析更复杂的字符串,因为您现在将其保存为“java.awt.Color[r=255,g=0,b=0]”。
您可以在此处查看 Color 的构造函数: http://java.sun.com/javase/6/docs/api/(在“所有类”中搜索颜色)。
彼得
【讨论】:
不要使用toString()。使用getRGB() / new Color(rgb) 保存/恢复颜色值。
【讨论】: