java левые нули в строке с пробелами посередине

Я ищу решение производительности в многопоточных процессах в JSE 1.7.0.52 для этой проблемы:

У меня есть строка, например: "12697 26"

Мне нужна строка "00012697 26"

Это означает, что я не могу использовать метод String.formatter как:

String c = "   12697 26    ";<br />
String.format( "%1$15s", c);<br /><br />

Потому что результат будет таким же, как и на входе. 15-е заполняют строку слева пробелами, но мне нужно заполнить нулями....

В новой версии Java существует какое-то решение производительности? С уважением


person SkyBlackHawk    schedule 17.02.2014    source источник
comment
зачем вам это?   -  person user207421    schedule 17.02.2014
comment
@EJP Потому что я генерирую с помощью listagg в oracle 11g много строк в качестве вектора в другой системной конкатенации для интеграции, разделенной по атрибуту, и теперь у меня есть эта проблема.   -  person SkyBlackHawk    schedule 17.02.2014
comment
@Karna Это не дубликат, пожалуйста, внимательно прочитайте вопрос ...   -  person SkyBlackHawk    schedule 17.02.2014
comment
Я не люблю использовать RPAD в оракуле, потому что sql очень тяжелый, так как стоит ...   -  person SkyBlackHawk    schedule 17.02.2014
comment
Почему ровно 3 нуля?   -  person Henry    schedule 17.02.2014
comment
@ Генри, потому что мне нужно отправить эти данные в файл для хост-системы, а в дорожке, определенной для этого файла, это поле определено для 15 символов ...   -  person SkyBlackHawk    schedule 17.02.2014
comment
Но в вашем примере всего 12 символов...   -  person Henry    schedule 17.02.2014
comment
Почему «дорожка, определенная для этого файла, имеет это поле, определенное для 15 символов» с пробелом посередине и ведущими нулями слева? Такое впечатление, что вы сами не понимаете требования. NB стоимость RPAD тривиальна по сравнению со стоимостью запроса и извлечения.   -  person user207421    schedule 17.02.2014
comment
@Henry При редактировании строка записывается как 15 символов, но когда я публикую вопрос, передняя часть сайта stackoverflow отображается как обрезанная строка ...   -  person SkyBlackHawk    schedule 17.02.2014
comment
Люди, проблема описана.... У меня есть строка с пробелами посередине и перед первым символом, отличным от пробела... Мне нужно, чтобы правая панель уважала первый не пробел.....   -  person SkyBlackHawk    schedule 17.02.2014
comment
Простое повторение не дает ответа на вопрос.   -  person user207421    schedule 17.02.2014


Ответы (2)


Код есть..

String func(String s)
{
    int flag=0;
    String temp="":
    for(int i=0;i<s.length();i++)
    {
        if(flag==0&&s.charAt(i)==' ')
        temp+="0";
        else
        {
            flag=1;
            temp+=s.charAt(i);
         }
    }
    return temp;
  }
person Devavrata    schedule 17.02.2014
comment
Хорошо, ребята, спасибо, код, который я могу написать один... существует решение для повышения производительности? - person SkyBlackHawk; 17.02.2014
comment
Что вы подразумеваете под производительностью решения? - person tddmonkey; 17.02.2014
comment
решение для повышения производительности - это решение с низким уровнем ресурсов, используемых в java 1.7.0.51. - person SkyBlackHawk; 17.02.2014
comment
Это O (n), где n - длина строки, и я думаю, что это одна из лучших временных сложностей... - person Devavrata; 17.02.2014
comment
На самом деле ваше решение - O (n ^ 2) из-за конкатенации строк. Первая часть строки копируется в новую область памяти всякий раз, когда вы добавляете символ. Использование StringBuilder сделает это O (n). - person Henry; 17.02.2014

person    schedule
comment
Неверное решение на хвостовой строке. Мне не нужны нули на хвосте... - person SkyBlackHawk; 17.02.2014
comment
обновлено, чтобы отразить ваши требования сейчас - person tddmonkey; 17.02.2014
comment
Спасибо @MrWiggles, это то же самое решение, которое я использую. Проблема в том, что я управляю 1,2 ГБ файла на выходе с 6 000 000 записей в конкатенации.... и это решение тяжелое... - person SkyBlackHawk; 17.02.2014
comment
Что вы имеете в виду под тяжелым. Это всего лишь копия памяти в StringBuilder, и она будет повторяться только для начальных пробелов. Вы сделали какое-либо профилирование, чтобы увидеть, не сработает ли это для вас? - person tddmonkey; 17.02.2014
comment
Я сейчас ищу, чтобы использовать awk, я полагаю, что это больше производительности, прежде чем отправлять файл результатов ... Люди, большое спасибо за вашу помощь ... - person SkyBlackHawk; 17.02.2014
comment
Если вы работаете с файлом на Java, а затем передаете вывод в awk для добавления нулей, это наверняка не будет более производительным. - person tddmonkey; 17.02.2014