Целые числа с отступом влево (недесятичный формат) с нулями в Java - PullRequest
14 голосов
/ 30 июня 2010

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

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

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

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

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

Ответы [ 5 ]

23 голосов
/ 30 июня 2010

Для октановых и шестнадцатеричных чисел это так же просто, как String.format:

assert String.format("%03x", 16) == "010";
assert String.format("%03o", 8) == "010";
15 голосов
/ 30 июня 2010

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

String intAsString = Strings.padStart(Integer.toString(12345, 8), 10, '0');
6 голосов
/ 30 июня 2010

Как насчет этого (стандартная Java):

private final static String ZEROES = "0000000000";

// ...

String s = Integer.toString(12345, 8);
String intAsString = s.length() <= 10 ? ZEROES.substring(s.length()) + s : s;
3 голосов
/ 02 июля 2014

Печать номера HEX, например, с заполнением нулями:

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

Даст следующий вывод с включенным отступом:

000004d2

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

2 голосов
/ 30 июня 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...