19

昨天我有一个完美的工作代码,确切的形式是:

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

这会将它很好地填充到 00000001。

现在我通过 twoKeyChar 从表中获取字符串和 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);
}

我觉得我一定是输入了错误的东西,因为自从它上次工作以来没有理由让它崩溃。任何帮助/提示表示赞赏!谢谢你!

4

4 回答 4

31

你不需要Integer.toString()

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

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

于 2012-06-05T19:24:44.587 回答
1

聚会很晚。

String.format();如果即使在实施接受的答案后您仍然面临代码问题。

这对我不起作用:

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

因为两个原因:

  1. d对于小数点而不是字符串,它不会像预期的那样工作。
  2. 如果我使用它,使用%8d而不是%08d作为格式化程序对我不起作用%08d

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

String.format("%8s", stringvariable);
于 2020-09-30T11:46:35.653 回答
1

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

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

输出 - 0012

于 2021-02-09T07:46:31.827 回答
0

在 Android 中,您应该替换%1$s ... %d ... %.2f%1$s ... %2$d ... %3$.2f.

这样你就可以避免java.util.IllegalFormatConversionException: d != java.lang.Stringf != java.lang.String异常。

于 2021-08-23T13:26:49.113 回答