2014-09-16 4 views
1

Мне нужно форматировать длинное значение в строку.String.format производит странный вывод

входной записи, как:

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

Я делаю некоторые манипуляции на 4 жирным шрифтом полукокса (путем преобразования его в длину) и несколько других манипуляций других символов и получения результата.

Обработка 0003 должна давать 384 и, следовательно, перед вставкой в ​​фактическую запись мне нужно добавить «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 вставляется несколько раз в записи. что может быть ошибкой?

+0

Вы можете разместить некоторый образец кода? Ваши так называемые манипуляции на персонаже могут быть беспорядочными вещами. –

ответ

3

где я могу видеть, что 384 вставляется несколько раз в запись. что может быть ошибкой?

заменить заменит все вхождения первого аргумента на второй аргумент.

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)); 
+0

yeah спасибо :) вы правы :) – Harbinger

+0

так что wt я должен использовать здесь для замены, только там, где я хочу? – Harbinger

+1

сделать что-то вроде записи = new StringBuilder (запись) .replace (startIndex, endIndex, String.format (...)). ToString() – aioobe

Смежные вопросы