Счетчик приращений и отображение как заполненная нулями строка в Java - PullRequest
0 голосов
/ 19 ноября 2011

Существуют ли какие-либо утилиты, такие как Apache Commons StringUtils, которые позволяют легко увеличивать целое число, но выводить его в виде строки с нулевым заполнением?

Я, конечно, могу написать свою собственную, используя что-то вроде String.format("%05d", counter), ноМне интересно, есть ли библиотека, в которой это уже доступно.

Я предполагаю что-то, что я могу использовать, например:

// Create int counter with value of 0 padded to 4 digits
PaddedInt counter = new PaddedInt(0,4);

counter.incr();

// Print "0001"
System.out.println(counter); 

// Print "0002"
System.out.println(counter.incr());

String text = "The counter is now "+counter.decr();

// Print "The counter is now 0001"
System.out.println(text);

Ответы [ 3 ]

1 голос
/ 19 ноября 2011

На случай, если кому-то интересно, я собрал это через несколько минут после публикации моего вопроса:

import org.apache.commons.lang.StringUtils;

public class Counter {

    private int value;
    private int padding;

    public Counter() {
        this(0, 4);
    }

    public Counter(int value) {
        this(value, 4);
    }

    public Counter(int value, int padding) {
        this.value = value;
        this.padding = padding;
    }

    public Counter incr() {
        this.value++;
        return this;
    }

    public Counter decr() {
        this.value--;
        return this;
    }

    @Override
    public String toString() {
        return StringUtils.leftPad(Integer.toString(this.value), 
                this.padding, "0");
        // OR without StringUtils:
        // return String.format("%0"+this.padding+"d", this.value);
    }
}

Единственная проблема с этим заключается в том, что я должен вызвать toString(), чтобы получить из него строку, или добавить ее к строке, такой как ""+counter:

@Test
public void testCounter() {
    Counter counter = new Counter();
    assertThat("0000", is(counter.toString()));
    counter.incr();
    assertThat("0001",is(""+counter));
    assertThat("0002",is(counter.incr().toString()));
    assertThat("0001",is(""+counter.decr()));
    assertThat("001",is(not(counter.toString())));
}
1 голос
/ 19 ноября 2011

Я сомневаюсь, что вы найдете что-нибудь для этого, потому что заполнение и приращение являются двумя основными операциями, которые не связаны и тривиальны для реализации. Вы могли бы реализовать такой класс три раза за время, которое вы взяли, чтобы написать свой вопрос. Все сводится к тому, чтобы обернуть int в объект и реализовать toString, используя String.format.

0 голосов
/ 19 ноября 2011

Если честно, я думаю, что вы смешиваете разные проблемы. Целое число - это целое число со всеми операциями, и если вы хотите вывести его, дополненное нулями, это другое.

Возможно, вы захотите взглянуть на StringUtils.leftPad в качестве альтернативы String.format.

...