填充数字为0时,“IllegalFormatConversionException:d!= java.lang.String”?

时间:2012-06-05 19:23:17

标签: java regex string-formatting

我昨天有一个完美的代码,完全符合以下形式:

int lastRecord = 1;
String key = String.format("%08d", Integer.toString(lastRecord));

哪个会很好地填充到00000001。

现在我把它踢了一个缺口,两个KeyChar从表中获取一个字符串,lastRecord从一个表中获取一个int。

正如您所看到的,概念本质上是相同的 - 我将int转换为字符串并尝试用0填充它;但是,这次我收到以下错误:

java.util.IllegalFormatConversionException: d != java.lang.String

代码如下:

String newPK = null;
String twoCharKey = getTwoCharKey(tablename);
if (twoCharKey != null) {
     int lastRecord = getLastRecord(tablename);
     lastRecord++;
     //The println below outputs the correct values: "RU" and 11. 
     System.out.println("twocharkey:"+twoCharKey+"record:"+lastRecord+"<");
     //Now just to make it RU00000011
     newPK = String.format("%08d", Integer.toString(lastRecord));
     newPK = twoCharKey.concat(newPK);
}

我觉得我必须输错了,因为自上次工作以来没有理由让它破裂。任何帮助/提示表示赞赏!谢谢!

3 个答案:

答案 0 :(得分:17)

您不需要Integer.toString()

 newPK = String.format("%08d", lastRecord);

String.format()将执行转换和填充。

答案 1 :(得分:1)

它对我有用,这里应该是整数 12 应该是整数。

String.format("%04d", Integer.parseInt("12"));

输出 - 0012

答案 2 :(得分:0)

晚会很晚。

即使在实施已接受的答案后,仍然遇到String.format();代码的问题。

这对我不起作用:

String.format("%08d", stringvariable);

由于两个原因:

  1. 它不起作用,因为d期望小数点而不是字符串。
  2. 使用%8d代替%08d,因为格式化程序对我不起作用,如果我使用此%08d

如果您将基于字符串的变量与字符串数据一起使用。使用这个。

String.format("%8s", stringvariable);