2015-11-29 2 views
3

Я читаю документацию для методов Formatter.format и System.out.printf (Java 6), и я пытаюсь практиковать то, что узнал. Я столкнулся с исключением, которое кажется мне необоснованным, или есть проблема понимания темы.Метод System.out.printf генерирует исключение флагов

Код я написал просто:

final int i = -15; 
System.out.printf("%1$-+06d", i); 

Что я ожидаю оказывает INT печатается в следующем формате

1) pad to left ; - 
    2) view the sign (négatif or positif); + 
    3) complete with left zeros; 0 
    4) print on 6 columns (characters); 6 

Вместо этого, исключение, и я не знать почему:

Exception in thread "main" java.util.IllegalFormatFlagsException: Flags = '-+0' 
at java.util.Formatter$FormatSpecifier.checkNumeric(Formatter.java:2935) 
at java.util.Formatter$FormatSpecifier.checkInteger(Formatter.java:2890) 
at java.util.Formatter$FormatSpecifier.<init>(Formatter.java:2643) 
at java.util.Formatter.parse(Formatter.java:2480) 
at java.util.Formatter.format(Formatter.java:2414) 
at java.io.PrintStream.format(PrintStream.java:920) 
at java.io.PrintStream.printf(PrintStream.java:821) 
at cert.simo.formats.Test.main(Test.java:18) 

Любые объяснения? Спасибо.

ответ

3

"-" и "0" являются несовместимыми параметрами. Вы либо набиваете нулями, либо выравниваете влево. Ниже приведена часть исходного кода java 6 (v6-b14), вызывающая это исключение.

  if ((f.contains(Flags.PLUS) && f.contains(Flags.LEADING_SPACE)) 
      || (f.contains(Flags.LEFT_JUSTIFY) && f.contains(Flags.ZERO_PAD))) 
      throw new IllegalFormatFlagsException(f.toString()); 
Смежные вопросы