Подтвердить что ты не робот

Левое целое число (без десятичного формата) с нулями в Java

Ответ на вопрос ответил на целые числа, напечатанные в десятичном формате, но я ищу элегантный способ сделать то же самое с целыми числами в не десятичном формате ( как двоичный, восьмеричный, шестнадцатеричный).

Создание таких строк легко:

String intAsString = Integer.toString(12345, 8);

создаст String с восьмеричным представлением целочисленного значения 12345. Но как отформатировать его так, чтобы строка имела 10 цифр, кроме вычисления количества нулей и сборки новой строки "вручную".

Типичным вариантом использования было бы создание двоичных чисел с фиксированным числом битов (например, 16, 32,...), в которых хотелось бы иметь все цифры, включая начальные нули.

4b9b3361

Ответ 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;

Ответ 2

Для окта и шестнадцатеричного значения это просто, как String.format:

assert String.format("%03x", 16) == "010";
assert String.format("%03o", 8) == "010";

Ответ 3

С Guava вы можете просто написать:

String intAsString = Strings.padStart(Integer.toString(12345, 8), 10, '0');

Ответ 4

Распечатка номера HEX, например, с заполнением ZERO:

System.out.println(String.format("%08x", 1234));

Будет выдавать следующий результат, включая добавление:

000004d2

Замена x символом форматирования, связанным с OCTAL, сделает то же самое, возможно.

Ответ 5

Здесь приведена более повторная альтернатива с помощью 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, кстати довольно хорош.