class Counter {
private ArrayList<Integer> zählerstand;
private int first;
private int last;
private final char[] alphabet;
public Counter() {
String alphabet = "abc";
this.alphabet = alphabet.toCharArray();
zählerstand = null;
first = 0;
last = this.alphabet.length - 1;
}
public String getAndIncrementZählerstand() {
int anz;
int i;
boolean überlauf = false;
int lastPos = -1;
ArrayList<Character> listeNeu;
String zählerstandString = null;
if (zählerstand == null) {
zählerstand = new ArrayList();
zählerstand.add(0, first);
zählerstandString = zählerstandAlsString();
return zählerstandString;
}
anz = zählerstand.size();
überlauf = true;
for (i = anz - 1; i >= 0; i--) {
if (zählerstand.get(i) != last) {
lastPos = i;
überlauf = false;
break;
}
}
if (überlauf == true) {
for (i = 0; i < anz; i++) {
zählerstand.set(i, first);
}
zählerstand.add(0, first);
} else {
for (i = lastPos + 1; i < anz; i++) {
zählerstand.set(i, first);
}
int wert = zählerstand.get(lastPos);
zählerstand.set(lastPos, wert + 1);
}
zählerstandString = zählerstandAlsString();
return zählerstandString;
}
public String zählerstandAlsString() {
StringBuffer sb = new StringBuffer();
int index;
for (int i = 0; i < zählerstand.size(); i++) {
index = zählerstand.get(i);
char c;
c = alphabet[index];
sb.append(c);
}
return sb.toString();
}
public String toString() {
String temp;
temp = zählerstand.toString();
temp = temp.replace("[", "");
temp = temp.replace("]", "");
temp = temp.replace(",", "");
temp = temp.replace(" ", "");
return temp;
}
}
[QUOTE="mihe7, post: 1197582, member: 58041"]
Ich gehe mal nicht davon aus, dass Du mehr als 2 Mrd. Dateinamen brauchst, oder? Dann reicht ein einfaches int um die Namen durchzuzählen.
Wenn Du die Zahl auf einen Strings abbilden willst, die aus einem Alphabet mit n Symbolen aufgebaut sind, dann betrachtest Du den String einfach als Zahl zur Basis n, also etwa:
[code=Java]
public class Counter {
private final char[] alphabet;
private int value;
public Counter(String alphabet) {
this.alphabet = alphabet.toCharArray();
}
public String getAndIncrement() {
String result = toString();
value++;
return result;
}
@Override
public String toString() {
StringBuilder b = new StringBuilder();
int cur = value;
int n = alphabet.length;
while (cur > 0) {
b.insert(0, alphabet[cur % n]);
cur /= n;
}
if (b.length() == 0) {
b.append(alphabet[0]);
}
return b.toString();
}
public static void main(String[] args) {
Counter c = new Counter("abcdefghijklmnopqrstuvwxyz0123456789");
for (int i = 0; i < 10000; i++) {
System.out.println(i + ": " + c.getAndIncrement());
}
}
}