Можем ли мы использовать String.format() для pad/prefix символом с нужной длиной?

Может ли java.lang.String.format(String str, String str1) использоваться для добавления префикса определенного символа.

Я мог бы сделать это для числа вроде:

int sendID = 202022;
String usiSuffix = String.format("%032d", sendID);

Он делает String длиной 32 и слева с 0s: 00000000000000000000000000202022

Как добиться того же, когда sendID является String следующим:

String sendID = "AABB";

И мне нужен вывод вроде: 0000000000000000000000000000AABB

Ответ 1

Вы можете использовать этот хакерский способ для получения вашего результата:

String sendID = "AABB";
String output = String.format("%0"+(32-sendID.length())+"d%s", 0, sendID);

Демо: http://ideone.com/UNVjqS

Ответ 2

Вы можете сделать, как показано ниже, если вы действительно хотите использовать String.format,

String sendID = "AABB";
String.format("%32s", sendID ).replace(' ', '0')

Помимо String.format вы можете найти множество решений здесь.

Изменить: Спасибо, что Брайан указал на проблему. Вышеуказанная функция не работает для ввода с пробелами. Вы можете попробовать, как показано ниже. Но я не буду предлагать операцию ниже, поскольку у нее слишком много операций с цепочкой.

String sendID = "AA BB";
String suffix = String.format("%32s", "").replace(' ', '0') + sendID;
sendID = suffix.substring(sendID.length());

Вы также можете попробовать использовать StringUtils.leftPad

StringUtils.leftPad(sendID, 32 - sendID.length(), '0');

Ответ 3

Вы не можете использовать String.format() для заполнения с произвольными символами. Возможно, Apache Commons StringUtils.leftPad() будет полезен для краткого решения? Обратите внимание также на StringUtils.rightPad().

Ответ 4

Я просто добавляю код Java 8, если кому-то это нужно в будущем:

public class App {
    public static void main(String[] args) {
        System.out.println(leftpad("m m", 2, '@'));
        System.out.println(leftpad("m m", 5, '@'));
    }

    static String leftpad(String s, int nb, char pad) {
        return Optional.of(nb - s.length())
                .filter(i -> i > 0)
                .map(i-> String.format("%" + i + "s", "").replace(" ", pad + "") + s)
                .orElse(s);
    }

}

Эта версия поддерживает добавление любого char в качестве дополнения

Ответ 5

Вот как я решил эту проблему, используя базовую функцию jdks String.format

String sendId="AABB";
int length=20;
String.format("%"+length+"s",sendId).replaceAll(" ","0")