递增计数器并在Java中显示为零填充字符串

时间:2011-11-18 22:09:23

标签: java string apache-stringutils

是否有像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 个答案:

答案 0 :(得分:1)

我怀疑你会发现任何事情要做,因为填充和递增是两个不相关的基本操作,而且实现起来很简单。你可以在编写问题时用三次实现这样的课程。这一切都归结为将int包装到一个对象中并使用String.format实现toString。

答案 1 :(得分:1)

如果有人有兴趣,我在发布问题后几分钟就把它扔了:

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())));
}

答案 2 :(得分:0)

老实说,我认为你在混合不同的问题。整数是一个包含所有操作的整数,如果要输出,则用零填充不同的东西。

您可能希望查看StringUtils.leftPad作为String.format的替代方案。