【Java】【トラブル】Javaの実行例外の対応あれこれ

■ 「java.util.IllegalFormatConversionException: d != java.lang.String」が表示される

 以下のサイトを参考にソースを組んだら(下記の「サンプル」を参照)、
エラー「java.util.IllegalFormatConversionException: d != java.lang.String」が表示される
http://syunpon.com/programing/java/sample/numberformat.shtml

サンプル

public class StringFormat {
   public static void main(String[] args) {
      String fileName = "PC";
      int number = 10;

      // ★ココに注目★
      String result = String.format("%s_%1$03d.png", fileName, number);
      System.out.println("Result : " + result);
   }
}

実行結果

Exception in thread "main" java.util.IllegalFormatConversionException: d != java.lang.String
	at java.util.Formatter$FormatSpecifier.failConversion(Formatter.java:4302)
	at java.util.Formatter$FormatSpecifier.printInteger(Formatter.java:2793)
	at java.util.Formatter$FormatSpecifier.print(Formatter.java:2747)
	at java.util.Formatter.format(Formatter.java:2526)
	at java.util.Formatter.format(Formatter.java:2455)
	at java.lang.String.format(String.java:2925)
	at com.sample.etc.StringFormat.main(StringFormat.java:7)

原因

 * 「X$(X:数字)」は、引数の番号を指定できる

%1$03d
 ~~
 => 「1$」は、一番目の値が指定されていることになる。
    しかし、サンプルで言えば、一番目は「fileName」で、これはStringである。
    一方、「03d」は3桁の数字をしている文字列では合わない
 => よって、例外「d != java.lang.String」が発生する

対応策

String result = String.format("%s_%03d.png", fileName, number);