Как заполнить целое число нулями слева?
Как сделать левое заполнение числа int
нулями при преобразовании в String
в Java?
Мне нужно заполнить целые числа до значения 9999
ведущими нулями (например, 1 должно выглядеть как 0001
).
5 ответ(ов)
Если вы по какой-то причине используете Java версии до 1.5, вы можете попробовать использовать метод из библиотеки Apache Commons Lang:
org.apache.commons.lang.StringUtils.leftPad(String str, int size, '0')
Этот метод позволяет дополнить строку слева определённым символом до заданной длины. Убедитесь, что библиотека Apache Commons Lang добавлена в ваш проект.
Вы нашли хороший пример для форматирования чисел в Java. В вашем коде используется DecimalFormat
, который действительно подходит для форматирования чисел с фиксированным количеством цифр. Однако вы также упомянули использование String.format("%05d", number);
, и это тоже абсолютно корректный способ.
Вот краткое сравнение:
DecimalFormat:
DecimalFormat df = new DecimalFormat("00"); System.out.println(df.format(x));
- Подходит для случаев, когда вы хотите гибко форматировать число, например с использованием различных шаблонов.
- Он может быть немного более громоздким для простых задач.
String.format:
System.out.println(String.format("%05d", x));
- Этот метод более лаконичен и легко читается.
- Удобен для одноразового форматирования строки.
Оба метода работают, и вы правы, что для ваших целей String.format
может быть лучше благодаря своей краткости и простоте. Выбор зависит от вашего предпочтения и конкретного контекста использования.
Вы можете использовать следующий код на Java, чтобы форматировать числа с ведущими нулями:
import java.text.DecimalFormat;
DecimalFormat df = new DecimalFormat("0000");
String c = df.format(9); // Результат: 0009
String a = df.format(99); // Результат: 0099
String b = df.format(999); // Результат: 0999
В данном случае DecimalFormat
используется для форматирования чисел. Шаблон "0000" означает, что числа будут отформатированы так, чтобы в результате всегда было четыре цифры, при этом, если число меньше четырех цифр, добавляются ведущие нули. В приведенных примерах число 9 преобразуется в "0009", 99 в "0099", а 999 в "0999".
Вот как вы можете форматировать строки без использования DecimalFormat
.
Вы можете использовать метод String.format
, чтобы задать нужное количество цифр с ведущими нулями. Например:
String formatted1 = String.format("%02d", 9);
В результате вы получите:
09
Для числа 19, вы можете сделать так:
String formatted2 = String.format("%03d", 19);
В результате вы получите:
019
Если вам нужно отформатировать число 119 с четырьмя цифрами:
String formatted3 = String.format("%04d", 119);
В результате вы получите:
0119
Таким образом, вы можете форматировать числа с нужным количеством ведущих нулей, используя простой и лаконичный подход с String.format
.
Если важна производительность в вашем случае, вы можете реализовать это самостоятельно с меньшими накладными расходами по сравнению с функцией String.format
:
/**
* @param in Значение целого числа
* @param fill Количество цифр для дополнения
* @return Данное значение, дополненное слева нулями до указанного количества цифр
*/
public static String lPadZero(int in, int fill){
boolean negative = false;
int value, len = 0;
if(in >= 0){
value = in;
} else {
negative = true;
value = - in;
in = - in;
len ++;
}
if(value == 0){
len = 1;
} else{
for(; value != 0; len ++){
value /= 10;
}
}
StringBuilder sb = new StringBuilder();
if(negative){
sb.append('-');
}
for(int i = fill; i > len; i--){
sb.append('0');
}
sb.append(in);
return sb.toString();
}
Производительность
public static void main(String[] args) {
Random rdm;
long start;
// Использование собственной функции
rdm = new Random(0);
start = System.nanoTime();
for(int i = 10000000; i != 0; i--){
lPadZero(rdm.nextInt(20000) - 10000, 4);
}
System.out.println("Собственная функция: " + ((System.nanoTime() - start) / 1000000) + "ms");
// Использование String.format
rdm = new Random(0);
start = System.nanoTime();
for(int i = 10000000; i != 0; i--){
String.format("%04d", rdm.nextInt(20000) - 10000);
}
System.out.println("String.format: " + ((System.nanoTime() - start) / 1000000) + "ms");
}
Результат
Собственная функция: 1697ms
String.format: 38134ms
Как видно из тестов, использование собственной функции значительно быстрее, чем String.format
, что делает её предпочтительным решением, если вы сталкиваетесь с высокими требованиями к производительности.
Инициализация ArrayList в одну строчку
Что значит "Не удалось найти или загрузить основной класс"?
Как установить Java 8 на Mac
Почему в RecyclerView отсутствует onItemClickListener()?
Что значит 'synchronized'?