我实现了一个计数器方法,它总是返回一个递增的数字。但是用户可以给出希望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
}
答案 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;
}
}