Scrubbing user input
I only have a few minor suggestions, but none are hard-line.


You have a space between the else if and open parenthesis. I don't like this style of removing spaces around keywords and from between ) and { as it becomes hard to read without syntax highlighting (even with it).
Instead of too few/many arguments which isn't very specific, have a single exception that says how many were provided and how many are required.

if (colors.length != 3) {
    throw new MalformedColorException("Color requires 3 values, got " + colors.length);
}

Moving the individual value parsing to a separate method would allow for more checks (range, sign, etc) and allow specifying which color was incorrect in the exception.

return new Color(
    parseComponent("red", colors[0]),
    parseComponent("green", colors[1]),
    parseComponent("blue", colors[2])
);

private int parseComponent(String name, String value) {
    try {
        int parsed = Integer.parseInt(value);
        if (parsed &lt; 0 || parsed &gt; 255) {
            throw new MalformedColorException(
                    name + " component \"" + value + "\" out of range");
        }
        return parsed;
    } catch (NumberFormatException e) {
        throw new MalformedColorException(
                name + " component \"" + value + "\" must be an integer");
    }
}