将“rgb (x, x, x)”字符串解析为彩色对象
有没有一种有效的方法/现有的解决方案可以将字符串“rgb (x, x, x)”[在本例中为x为0-255]解析为彩色对象?[我计划使用颜色值将它们转换为十六进制颜色等效性。
我宁愿有一个GWT选项。我也意识到使用像Scanner.nextInt这样的东西会很容易。但是,我正在寻找一种更可靠的方法来获取此信息。
有没有一种有效的方法/现有的解决方案可以将字符串“rgb (x, x, x)”[在本例中为x为0-255]解析为彩色对象?[我计划使用颜色值将它们转换为十六进制颜色等效性。
我宁愿有一个GWT选项。我也意识到使用像Scanner.nextInt这样的东西会很容易。但是,我正在寻找一种更可靠的方法来获取此信息。
据我所知,Java或GWT中没有这样的内置功能。您必须编写自己的方法:
public static Color parse(String input)
{
Pattern c = Pattern.compile("rgb *\\( *([0-9]+), *([0-9]+), *([0-9]+) *\\)");
Matcher m = c.matcher(input);
if (m.matches())
{
return new Color(Integer.valueOf(m.group(1)), // r
Integer.valueOf(m.group(2)), // g
Integer.valueOf(m.group(3))); // b
}
return null;
}
你可以像这样使用它
// java.awt.Color[r=128,g=32,b=212]
System.out.println(parse("rgb(128,32,212)"));
// java.awt.Color[r=255,g=0,b=255]
System.out.println(parse("rgb (255, 0, 255)"));
// throws IllegalArgumentException:
// Color parameter outside of expected range: Red Blue
System.out.println(parse("rgb (256, 1, 300)"));
对于那些不了解正则表达式的用户:
public class Test
{
public static void main(String args[]) throws Exception
{
String text = "rgb(255,0,0)";
String[] colors = text.substring(4, text.length() - 1 ).split(",");
Color color = new Color(
Integer.parseInt(colors[0].trim()),
Integer.parseInt(colors[1].trim()),
Integer.parseInt(colors[2].trim())
);
System.out.println( color );
}
}
编辑:我知道有人会评论错误检查。我把这留给海报。通过执行以下操作可以轻松处理:
if (text.startsWith("rgb(") && text.endsWith(")"))
// do the parsing
if (colors.length == 3)
// build and return the color
return null;
关键是你不需要一个复杂的正则表达式,乍一看没人理解。添加错误条件是一项简单的任务。