Java String.format产生奇怪的输出

Java String.format产生奇怪的输出,java,string.format,Java,String.format,我需要将长值格式化为字符串 输入记录如下所示: "12353555100001112083997OOO0000003 0015900122550300099010000245000311503576L16N000012800001286 01 000179 00000510000492M00058499999 0016000001000541900818901 0045207 00<strong>0003</strong>

我需要将长值格式化为字符串

输入记录如下所示:

"12353555100001112083997OOO0000003   0015900122550300099010000245000311503576L16N000012800001286  01      000179            00000510000492M00058499999    0016000001000541900818901    0045207 00<strong>0003</strong>0000016"
但是,它会产生一个奇怪的输出,如:

1 3845551 3841112083997OOO 384003   00159001225503   9901 384245000311503576L16N 384128 3841286  01      000179             384051 384492M00058499999    0016 38401000541900818901    0045207  38403 384016
我可以看到,384被多次插入到记录中。可能是什么错误

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

replace将用第二个参数替换第一个参数的所有发生

record.replace(record.substring(startIndex, endIndex), String.format("%1$4d", myValue));
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                       first argument                         second argument
也就是说,如果字符串
record.substring(startIndex,endIndex)
恰好表示出现在
record
中多个位置的字符串,则第二个参数将在多个位置结束

你可能想看看,然后做类似的事情

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

你能发布一些代码示例吗?你所谓的对字符的一些操作可能会把事情弄得一团糟,所以我应该在这里用它来替换,只在我想替换的地方吗?执行类似于record=new StringBuilder(record).replace(startIndex,endIndex,String.format(…)).toString()的操作。还有一个问题@aiobee:我从arraylist中读取了记录并进行了操作。正如您所提到的,我正在使用StringBuilder进行操作。因此,我每次都以“字符串”的形式读取arraylist的记录,然后执行“new StringBuilder”并执行逻辑。然后,再次将其转换为“String”并添加到新的ArrayList。我做得对吗,还是说“new StringBuilder”不是正确的方法?如果您愿意,可以使用new StringBuilder。另一种选择是全程使用ArrayList。
record.replace(startIndex, endIndex, String.format("%1$4d", myValue));