是否有更好的方法将数字转换为字母等价物?
private String getCharForNumber(int i) {
char[] alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();
if (i > 25) {
return null;
}
return Character.toString(alphabet[i]);
}
Run Code Online (Sandbox Code Playgroud)
也许还可以处理超过26的数字?
ada*_*shr 59
只需使用ASCII表示.
private String getCharForNumber(int i) {
return i > 0 && i < 27 ? String.valueOf((char)(i + 64)) : null;
}
Run Code Online (Sandbox Code Playgroud)
注:这是假定i之间1和26包容性.
如果要从零开始i > -1 && i < 26,65则必须将条件更改为和增量i.
这是完整的ASCII表,以防您需要参考:

编辑:
正如一些人在这里建议的那样,直接使用字符'A'而不是ASCII代码更具可读性.
private String getCharForNumber(int i) {
return i > 0 && i < 27 ? String.valueOf((char)(i + 'A' - 1)) : null;
}
Run Code Online (Sandbox Code Playgroud)
Qua*_*um7 24
我没有给0-25之外的输入提供错误或一些标记值(例如'?'),但有时我发现为所有整数提供一个定义良好的字符串很有用.我喜欢使用以下内容:
0 -> A
1 -> B
2 -> C
...
25 -> Z
26 -> AA
27 -> AB
28 -> AC
...
701 -> ZZ
702 -> AAA
...
Run Code Online (Sandbox Code Playgroud)
这也可以扩展到底片:
-1 -> -A
-2 -> -B
-3 -> -C
...
-26 -> -Z
-27 -> -AA
...
Run Code Online (Sandbox Code Playgroud)
Java代码:
public static String toAlphabetic(int i) {
if( i<0 ) {
return "-"+toAlphabetic(-i-1);
}
int quot = i/26;
int rem = i%26;
char letter = (char)((int)'A' + rem);
if( quot == 0 ) {
return ""+letter;
} else {
return toAlphabetic(quot-1) + letter;
}
}
Run Code Online (Sandbox Code Playgroud)
Python代码,包括使用字母数字(基数为36)或区分大小写(基数为62)的字母表:
def to_alphabetic(i,base=26):
if base < 0 or 62 < base:
raise ValueError("Invalid base")
if i < 0:
return '-'+to_alphabetic(-i-1)
quot = int(i)/base
rem = i%base
if rem < 26:
letter = chr( ord("A") + rem)
elif rem < 36:
letter = str( rem-26)
else:
letter = chr( ord("a") + rem - 36)
if quot == 0:
return letter
else:
return to_alphabetic(quot-1,base) + letter
Run Code Online (Sandbox Code Playgroud)
我会返回一个字符char而不是字符串。
public static char getChar(int i) {
return i<0 || i>25 ? '?' : (char)('A' + i);
}
Run Code Online (Sandbox Code Playgroud)
注意:当字符解码器无法识别字符时,它会返回?
我会使用'A'or'a'代替查找 ASCII 代码。