Out of curiosity I tried to create a really large string. It turned out that the Formatter class chokes on width specifications exceeding Integer.MAX_VALUE:
// Produces an empty string. (2147483648 = Integer.MAX_VALUE + 1)
String.format("%2147483648s", "");
So I went off to verify that it was indeed according to spec. But all it says is
If the format specifier contains a width or precision with an invalid value or which is otherwise unsupported, then a IllegalFormatWidthException or IllegalFormatPrecisionException respectively will be thrown.
So in my opinion the correct behavior would be to throw an IllegalFormatWidthException.
Is this bug (?) documented somewhere? (If not, I’ll go report it.)
Also, it should be noted that if one puts a - in front of the width (to left-justify the output):
String.format("%-2147483648s", "");
it indeed throws a MissingFormatWidthException (which, as I see it, seems to be correct behavior).
(I’m using OpenJDK version 1.6.0_20.)
I think you’re right and that it’s a bug: it should throw IllegalFormatWidthException, if any existing exception.
The javadoc for that exception says “Unchecked exception thrown when the format width is a negative value other than -1 or is otherwise unsupported”, which oddly doesn’t specifically mention values that are too large. I think the “otherwise unsupported” clause makes this a reasonable exception to throw.