Kev*_*nce 5 java sequence-generators
我需要生成递增的字符序列,其中每个字符可以是不同的字母或数字范围.有谁知道这个任务的图书馆?例如:
AAA000_A0
Run Code Online (Sandbox Code Playgroud)
A是任何字母AZ,0是任意数字0-9.我也需要增加它们,例如:
AAA000_A0++ = AAA000_A1
Run Code Online (Sandbox Code Playgroud)
如果你坚持下去,它将继续这样:
AAA000_A9++ = AAA000_B0
Run Code Online (Sandbox Code Playgroud)
直到达到:
ZZZ999_Z9
Run Code Online (Sandbox Code Playgroud)
我会将问题分解为每个点,有点像汽车的里程表:
public class CounterDigit {
private final CounterDigit _higher;
private final String _chars;
private int _index = 0;
public CounterDigit(CounterDigit higher, String chars) {
_higher = higher;
_chars = chars;
}
public CounterDigit(CounterDigit higher, char first, char last) {
this(higher, charRange(first, last));
}
private static String charRange(char first, char last) {
StringBuilder b = new StringBuilder();
for (char c = first; c <= last; ++c) {
b.append(c);
}
return b.toString();
}
public char current() {
return _chars.charAt(_index);
}
public void increment() {
if (++_index >= _chars.length()) {
_index = 0;
if (_higher != null) {
_higher.increment();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以聚合这些的有序序列:
public class Counter {
private CounterDigit[] _digits;
public Counter(String template) {
CounterDigit recent = null;
_digits = new CounterDigit[template.length()];
for (int i = 0; i < template.length(); ++i) {
char c = template.charAt(i);
if (c == 'A') { recent = new CounterDigit(recent, 'A', 'Z'); }
else if (c == '0') { recent = new CounterDigit(recent, '0', '9'); }
else { recent = new CounterDigit(recent, c, c); }
_digits[i] = recent;
}
}
public void increment() {
_digits[_digits.length-1].increment();
}
@Override
public String toString() {
StringBuilder b = new StringBuilder(_digits.length);
for (CounterDigit digit : _digits) {
b.append(digit.current());
}
return b.toString();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
920 次 |
| 最近记录: |