Заполните строки с 0, используя форматтер - PullRequest
5 голосов
/ 30 мая 2011

Я знаю, что могу заполнить пробелы, используя:

String.format("%6s", "abc"); // ___abc ( three spaces before abc

Но я не могу найти, как производить:

000abc

Edit:

Я пытался %06s, прежде чем спросить это. Просто сообщаю вам, прежде чем появятся другие (неопробованные) ответы.

В настоящее время у меня есть: String.format("%6s", data ).replace(' ', '0' ) Но я думаю, что существует лучший способ.

Ответы [ 5 ]

6 голосов
/ 31 мая 2011

Вы действительно должны рассмотреть возможность использования StringUtils от Apache Commons Lang для таких задач манипулирования строками, поскольку ваш код станет намного более читабельным. Ваш пример будет StringUtils.leftPad("abc", 6, ' ');

1 голос
/ 09 июля 2011

Во что бы то ни стало, найдите понравившуюся вам библиотеку для такого рода вещей и узнайте, что находится в вашем новом блестящем наборе инструментов, чтобы вы заново изобрели меньшее количество колес (у которых иногда есть квартиры). Я предпочитаю Guava Apache Commons. В этом случае они эквивалентны:

Strings.padStart("abc",6,'0');
1 голос
/ 31 мая 2011

Попробуйте применить свой собственный метод статической утилиты

public static String leftPadStringWithChar(String s, int fixedLength, char c){

    if(fixedLength < s.length()){
        throw new IllegalArgumentException();
    }

    StringBuilder sb = new StringBuilder(s);

    for(int i = 0; i < fixedLength - s.length(); i++){
        sb.insert(0, c);
    }

    return sb.toString();
}

А затем используйте его как таковое

System.out.println(leftPadStringWithChar("abc", 6, '0'));

OUTPUT

000abc
0 голосов
/ 31 мая 2011

Быстро и грязно (установите длину строки "000 .... 00" как максимальную длину, которую вы поддерживаете):

public static String lefTpadWithZeros(String x,int minlen) {
   return x.length()<minlen ? 
       "000000000000000".substring(0,minlen-x.length()) + x : x;     
}
0 голосов
/ 30 мая 2011
...