Chirag Parmar Chirag Parmar - 4 months ago 34
Java Question

Alphanumeric increment algorithm in JAVA

I need to implement alphanumeric increment algorithm like
AAA001 should become AAA002
AAA999 should become AAB000 and so on.

All alphabets are in uppercase and letters are from 0-9.

There are some rules though, like some 000 or 666 should not come in a series. That can be done later on but I am in need of basic logic to implement the algorithm.

I would appreciate the help..

Answer

For the solution which is not a true base 36:

First, checks if the number ends with 9s. If so, increment the left part (A's). I'm not 100% sure it covers the corners cases though:

String number = "AAA999";
if (number.matches("[A-Z]*[9]*")) {
    number = increment(number, 46656); //1000 base 36 in base 10
    number = increment(number, -11997); //999 base 36 in base 10
} else {
    number = increment(number, 1);
}
System.out.println(number);

private String increment(String number, int incr) {
    int integerValue = Integer.parseInt(number, 36) + incr;
    return Integer.toString(integerValue, 36).toUpperCase();
}

Or this, with less conversion between String and int:

String number = "AAA999";
int integerValue = Integer.parseInt(number, 36);
if (number.matches("[A-Z]*[9]*")) {
    integerValue = integerValue + 46656; //1000 base 36 in base 10
    integerValue = integerValue - 11997; //999 base 36 in base 10
} else {
    integerValue++;
}
number = Integer.toString(integerValue, 36);
System.out.println(number);
Comments