Вопрос-ответ

Add leading zeroes to number in Java? [duplicate]

Добавлять начальные нули к number в Java?

Есть ли лучший способ получить этот результат? Эта функция завершается с ошибкой, если в num цифр больше, чем digits, и я чувствую, что это должно быть где-то в библиотеке (например, Integer.toString(x,"% 3d") или что-то в этом роде)

static String intToString(int num, int digits) {
StringBuffer s = new StringBuffer(digits);
int zeroes = digits - (int) (Math.log(num) / Math.log(10)) - 1;
for (int i = 0; i < zeroes; i++) {
s.append(0);
}
return s.append(num).toString();
}
Переведено автоматически
Ответ 1

String.format (https://docs.oracle.com/javase/1.5.0/docs/api/java/util/Formatter.html#syntax)

В вашем случае это будет:

String formatted = String.format("%03d", num);

  • 0 - дополнять нулями

  • 3 - установить ширину равной 3

Ответ 2

Начиная с Java 1.5, вы можете использовать метод String.format. Например, чтобы сделать то же самое, что и в вашем примере:

String format = String.format("%0%d", digits);
String result = String.format(format, num);
return result;

В этом случае вы создаете строку формата, используя ширину, указанную в цифрах, а затем применяете ее непосредственно к числу. Формат для этого примера преобразуется следующим образом:

%% --> %
0 --> 0
%d --> <value of digits>
d --> d

Итак, если digits равно 5, строка формата становится %05d которая определяет целое число шириной 5, печатающее начальные нули. Смотрите в java docs для String.format получения дополнительной информации о спецификаторах преобразования.

Ответ 3

Другой вариант - использовать DecimalFormat для форматирования числовой строки. Вот еще один способ выполнить работу без использования String.format, если вы застряли в мире до версии 1.5:

static String intToString(int num, int digits) {
assert digits > 0 : "Invalid number of digits";

// create variable length array of zeros
char[] zeros = new char[digits];
Arrays.fill(zeros, '0');
// format number as String
DecimalFormat df = new DecimalFormat(String.valueOf(zeros));

return df.format(num);
}
Ответ 4

Как насчет просто:

public static String intToString(int num, int digits) {
String output = Integer.toString(num);
while (output.length() < digits) output = "0" + output;
return output;
}
java