12

Как заполнить целое число нулями слева?

14

Как сделать левое заполнение числа int нулями при преобразовании в String в Java?

Мне нужно заполнить целые числа до значения 9999 ведущими нулями (например, 1 должно выглядеть как 0001).

5 ответ(ов)

1

Если вы по какой-то причине используете Java версии до 1.5, вы можете попробовать использовать метод из библиотеки Apache Commons Lang:

org.apache.commons.lang.StringUtils.leftPad(String str, int size, '0')

Этот метод позволяет дополнить строку слева определённым символом до заданной длины. Убедитесь, что библиотека Apache Commons Lang добавлена в ваш проект.

0

Вы нашли хороший пример для форматирования чисел в Java. В вашем коде используется DecimalFormat, который действительно подходит для форматирования чисел с фиксированным количеством цифр. Однако вы также упомянули использование String.format("%05d", number);, и это тоже абсолютно корректный способ.

Вот краткое сравнение:

  1. DecimalFormat:

    DecimalFormat df = new DecimalFormat("00");
    System.out.println(df.format(x));
    
    • Подходит для случаев, когда вы хотите гибко форматировать число, например с использованием различных шаблонов.
    • Он может быть немного более громоздким для простых задач.
  2. String.format:

    System.out.println(String.format("%05d", x));
    
    • Этот метод более лаконичен и легко читается.
    • Удобен для одноразового форматирования строки.

Оба метода работают, и вы правы, что для ваших целей String.format может быть лучше благодаря своей краткости и простоте. Выбор зависит от вашего предпочтения и конкретного контекста использования.

0

Вы можете использовать следующий код на 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".

0

Вот как вы можете форматировать строки без использования 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.

0

Если важна производительность в вашем случае, вы можете реализовать это самостоятельно с меньшими накладными расходами по сравнению с функцией 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, что делает её предпочтительным решением, если вы сталкиваетесь с высокими требованиями к производительности.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь