String.format / Formatter中的错误?

时间:2011-02-20 10:26:56

标签: java string formatter

出于好奇,我试图创建一个非常大的字符串。事实证明,Formatter类扼流宽度规格超过Integer.MAX_VALUE

// Produces an empty string. (2147483648 = Integer.MAX_VALUE + 1)
String.format("%2147483648s", "");

所以我去验证它确实符合规范。但它所说的只是

  

如果格式说明符包含带有无效值的宽度或精度,或者其他方式不受支持,则将分别抛出IllegalFormatWidthException或IllegalFormatPrecisionException。

所以在我看来,正确的行为是抛出IllegalFormatWidthException

这个错误(?)是否记录在某处? (如果没有,我会去报告。)


另外,应该注意的是,如果将-放在宽度的前面(左对齐输出):

String.format("%-2147483648s", "");

它确实会抛出一个MissingFormatWidthException(正如我所看到的那样,似乎是正确的行为)。

(我正在使用OpenJDK版本1.6.0_20。)

2 个答案:

答案 0 :(得分:2)

我认为你是对的并且这是一个错误:如果有任何现有异常,它应该抛出IllegalFormatWidthException。

该异常的javadoc说“当格式宽度为-1以外的负值或者不支持时,抛出未经检查的异常”,这奇怪地没有特别提到过大的值。我认为“不支持的”条款使得这是一个合理的例外。

答案 1 :(得分:1)

format / formatter文档应该解决这种情况,这是由于尝试将字符串写入格式的appender超过字符串的最大长度而引起的。如果您确实需要这样做,则必须使用流。

请参阅String's Maximum length in Java - calling length() method