Ответ 1
Как насчет этого (стандартная Java):
private final static String ZEROES = "0000000000";
// ...
String s = Integer.toString(12345, 8);
String intAsString = s.length() <= 10 ? ZEROES.substring(s.length()) + s : s;
Ответ на вопрос ответил на целые числа, напечатанные в десятичном формате, но я ищу элегантный способ сделать то же самое с целыми числами в не десятичном формате ( как двоичный, восьмеричный, шестнадцатеричный).
Создание таких строк легко:
String intAsString = Integer.toString(12345, 8);
создаст String с восьмеричным представлением целочисленного значения 12345. Но как отформатировать его так, чтобы строка имела 10 цифр, кроме вычисления количества нулей и сборки новой строки "вручную".
Типичным вариантом использования было бы создание двоичных чисел с фиксированным числом битов (например, 16, 32,...), в которых хотелось бы иметь все цифры, включая начальные нули.
Как насчет этого (стандартная Java):
private final static String ZEROES = "0000000000";
// ...
String s = Integer.toString(12345, 8);
String intAsString = s.length() <= 10 ? ZEROES.substring(s.length()) + s : s;
Для окта и шестнадцатеричного значения это просто, как String.format
:
assert String.format("%03x", 16) == "010";
assert String.format("%03o", 8) == "010";
С Guava вы можете просто написать:
String intAsString = Strings.padStart(Integer.toString(12345, 8), 10, '0');
Распечатка номера HEX, например, с заполнением ZERO:
System.out.println(String.format("%08x", 1234));
Будет выдавать следующий результат, включая добавление:
000004d2
Замена x символом форматирования, связанным с OCTAL, сделает то же самое, возможно.
Здесь приведена более повторная альтернатива с помощью StringBuilder
.
public static String padZero(int number, int radix, int length) {
String string = Integer.toString(number, radix);
StringBuilder builder = new StringBuilder().append(String.format("%0" + length + "d", 0));
return builder.replace(length - string.length(), length, string).toString();
}
Пример Guava, опубликованный ColinD, кстати довольно хорош.