String.format()获取最大值

时间:2013-10-01 07:10:58

标签: java string integer format

我实现了一个计数器方法,它总是返回一个递增的数字。但是用户可以给出希望format,2位数,3位数或任何他想要的东西。 格式是标准的String.format()类型的String,如%02d%5d。达到最大值时,计数器应重置为0.

如何找出可以使用给定format表示的最大值?

int counter = 0;
private String getCounter(String format){
    if(counter >= getMaximum(format)){
        counter = 0;
    }
    else {
        counter++;
    }
    return String.format(format, counter);
}

private int getMaximum(String format){
    //TODO ???
    //Format can be %02d => should return 100
    //Format can be %05d => should return 100000

}

3 个答案:

答案 0 :(得分:2)

尚未验证此代码,但有些内容应与错误检查一起使用

    String str = fullresultText.replace ("%", "").replace("d", "");
    maxVal = Math.pow (10, Integer.parseInt (str));

答案 1 :(得分:1)

没有内置任何内容,我不知道有任何库这样做(我可能是错的)。请记住,必要时会扩展格式以避免丢失数字。例如

System.out.printf("%06d", 11434235);

将很乐意打印整个8位数字。

因此,直接指定格式可能不是正确的方法。创建一个Counter类来封装所需的"里程表"行为。

public class Counter {
    private int width;
    private int limit;
    private String format;
    private int value=0;
    public Counter(int width, int value) { 
        this.width  = width; 
        this.limit  = BigInteger.valueOf(10).pow(width).intValue()-1; 
        this.format = String.format("%%0%dd",width);
        this.value  = value;
    }
    public Counter(int width) {
        this(width,0);
    }
    public Counter increment() { 
        value = value<limit ? value+1 : 0;
        return this; 
    }
    @Override
    public String toString() {
        return String.format(this.format,this.value); 
    }
}

样本用法:

Counter c3 = new MiscTest.Counter(3,995);
for (int i=0; i<10; i++)
{
    System.out.println(c3.increment().toString());
}

输出:

996
997
998
999
000
001
002
003
004
005

答案 2 :(得分:1)

private int counter = 0;

private String getCounter(String format) {
    counter = (counter + 1) % getMaximum(format);
    return String.format(format, counter);
}

private int getMaximum(String format) {
    try {
        MessageFormat messageFormat = new MessageFormat("%{0,number,integer}d");
        int pow = ((Long) messageFormat.parse(format)[0]).intValue();
        return (int) Math.pow(10, pow);
    } catch (ParseException e) {
        System.out.println("Incorrect format");
        return -1;
    }
}