Ответ 1
Вы можете использовать этот хакерский способ для получения вашего результата:
String sendID = "AABB";
String output = String.format("%0"+(32-sendID.length())+"d%s", 0, sendID);
Может ли 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
Вы можете использовать этот хакерский способ для получения вашего результата:
String sendID = "AABB";
String output = String.format("%0"+(32-sendID.length())+"d%s", 0, sendID);
Вы можете сделать, как показано ниже, если вы действительно хотите использовать 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');
Вы не можете использовать String.format()
для заполнения с произвольными символами. Возможно, Apache Commons StringUtils.leftPad() будет полезен для краткого решения? Обратите внимание также на StringUtils.rightPad()
.
Я просто добавляю код 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 в качестве дополнения
Вот как я решил эту проблему, используя базовую функцию jdks String.format
String sendId="AABB";
int length=20;
String.format("%"+length+"s",sendId).replaceAll(" ","0")