java-可以包含数字0-9 和字母A-Z的加法编码规则
例如城市编码:2位,可以是0-9 也可以是A-Z,那么实际编码顺序则是0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G…
A9的下一个编码是AA,AZ的下一个编码是B0,以此类推。
由于没有找到合适的方法,只能手撕一个,写得很烂,应该可以用,有需要自取,有bug麻烦提醒下。。。
public static void main(String[] strs) {
String s = "9Z";
char[] code = s.toCharArray();
if (code.length > 0) {
StringBuilder builder = new StringBuilder();
//0-9 ascll码是48-57 A-Z ascll是65-90
//加法进位
int carry = 0;
for (int i = code.length - 1; i >= 0; i--) {
int value = 0;
if (i == code.length - 1) {
//末位才需要加一
value = 1;
} else {
value = 0;
}
int k = (int) code[i];
if ((k + carry + value) < '9') {//还是数字
char c = (char) (k + carry + value);
builder.append(c);
carry = 0;
} else if ((k + carry + value) == '9') {
//9
char c = '9';
builder.append(c);
carry = 0;
} else if ((k + carry + value) < 'Z') {
if ((k + carry + value) >= 'A') {//本来就是字母,因为最多只能加1
//还是字母
char c = (char) (k + carry + value);
builder.append(c);
carry = 0;
} else {//从数字跳到字母
char c = (char) (k + carry + value - '9' - 1 + 'A');
builder.append(c);
carry = 0;
}
} else if ((k + carry + value) == 'Z') {
//Z
char c = 'Z';
builder.append(c);
carry = 0;
} else if ((k + carry + value) > 'Z') {
//跳回数字,并且进一位
char c = '0';
builder.append(c);
carry = 1;
if (i == 0) {
//如果已经是最高位了,直接加一位
builder.append('1');
}
}
}
//用的时候记得builder要倒序一下再用呀!builder.reverse()
System.out.println(builder.reverse().toString());
}
}
上述代码输出结果是