Один из способов проверки ввода может быть:
public static int parseHex(final String color) {
final Matcher mx = Pattern.compile("^#([0-9a-z]{6})$", CASE_INSENSITIVE).matcher(color);
if(!mx.find())
throw new IllegalArgumentException("invalid color value");
return Integer.parseInt(mx.group(1), 16);
}
Хотя это и не требуется, вы можете разобрать каждый компонент цвета отдельно:
public static int parseColor(final String color) {
final Matcher mx = Pattern.compile("^#([0-9a-z]{2})([0-9a-z]{2})([0-9a-z]{2})$", CASE_INSENSITIVE).matcher(color);
if(!mx.find())
throw new IllegalArgumentException("invalid color value");
final int R = Integer.parseInt(mx.group(1), 16);
final int G = Integer.parseInt(mx.group(2), 16);
final int B = Integer.parseInt(mx.group(3), 16);
return (R << 16) + (G << 8) + B;
}
Если зависимость от Color
не является проблемой, вы можете использовать:
public static int parseColor(final String color) {
final Color c = Color.decode(color);
return (c.getRed() << 16) + (c.getGreen() << 8) + c.getBlue();
}
С другой стороны, вы тоже можете сделать:
public static int parseColor(final String color) {
return 0xFFFFFF & (Color.decode(color).getRGB() >> 8);
}
Но поскольку требуется знать внутреннее представление, это не рекомендуется.