■ 「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);