String.format产生奇怪的输出

时间:2014-09-16 11:55:13

标签: java string.format

我需要将long值格式化为string。

输入记录如:

"12353555100001112083997OOO0000003   0015900122550300099010000245000311503576L16N000012800001286  01      000179            00000510000492M00058499999    0016000001000541900818901    0045207 00<strong>0003</strong>0000016"

我正在对粗体4字符进行一些操作(通过将其转换为long)以及对其他字符进行少量其他操作并产生结果。

0003的操纵应该会产生384,因此在插入实际记录之前,我需要追加“{0}”&#39; 0应该像0384一样。我用了

long myValue = 384;
output = record.replace(record.substring(startIndex, endIndex), String.format("%1$4d", myValue));

但是,它会产生一个奇怪的输出,如:

1 3845551 3841112083997OOO 384003   00159001225503   9901 384245000311503576L16N 384128 3841286  01      000179             384051 384492M00058499999    0016 38401000541900818901    0045207  38403 384016

我可以看到,384被多次插入记录中。可能是什么错误?

1 个答案:

答案 0 :(得分:3)

  

我可以看到,384被多次插入记录中。可能是什么错误?

replace将用第二个参数替换第一个参数的所有出现。

record.replace(record.substring(startIndex, endIndex), String.format("%1$4d", myValue));
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                       first argument                         second argument

也就是说,如果字符串record.substring(startIndex, endIndex)恰好表示在record中的多个位置出现的字符串,那么第二个参数将在多个位置结束。

您可能需要查看StringBuilder.replace,并执行类似

的操作
record.replace(startIndex, endIndex, String.format("%1$4d", myValue));