如何在Java中将数字转换为字母?

是否有更好的方法将数字转换为字母等价物?

private String getCharForNumber(int i) { char[] alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray(); if (i > 25) { return null; } return Character.toString(alphabet[i]); } 

也许还可以处理超过26的数字呢?

只需使用ASCII表示。

 private String getCharForNumber(int i) { return i > 0 && i < 27 ? String.valueOf((char)(i + 64)) : null; } 

注意:这假设i126之间(包括126

您必须将条件更改为i > -1 && i < 26 ,如果您希望i从零开始,则将增量更改为65

这是完整的ASCII表,以防您需要参考:


在此处输入图像描述


编辑:

正如一些人在这里建议的那样,直接使用字符'A'代替其ASCII代码更具可读性。

 private String getCharForNumber(int i) { return i > 0 && i < 27 ? String.valueOf((char)(i + 'A' - 1)) : null; } 

我没有给0-25之外的输入提供错误或一些标记值(例如’?’),但有时我觉得为所有整数提供一个定义良好的字符串很有用。 我喜欢使用以下内容:

  0 -> A 1 -> B 2 -> C ... 25 -> Z 26 -> AA 27 -> AB 28 -> AC ... 701 -> ZZ 702 -> AAA ... 

这也可以扩展到底片:

  -1 -> -A -2 -> -B -3 -> -C ... -26 -> -Z -27 -> -AA ... 

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; } } 

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 

我会返回一个字符char而不是字符串。

 public static char getChar(int i) { return i<0 || i>25 ? '?' : (char)('A' + i); } 

注意:当字符解码器无法识别它返回的字符时?

我会使用'A''a'而不是查找ASCII码。

如果将a / A定义为0

 char res; if (i>25 || i<0){ res = null; } res = (i) + 65 } return res; 

65为captitals; 97非浮动

就个人而言,我更喜欢

 return "ABCDEFGHIJKLMNOPQRSTUVWXYZ".substring(i, i+1); 

它共享支持char[] 。 或者,我认为下一个最可读的方法是

 return Character.toString((char) (i + 'A')); 

这不依赖于记住ASCII表。 它没有做validation,但如果你愿意,我宁愿写

 char c = (char) (i + 'A'); return Character.isUpperCase(c) ? Character.toString(c) : null; 

只是为了让你明白你正在检查它是一个字母字符。

 public static string IntToLetters(int value) { string result = string.Empty; while (--value >= 0) { result = (char)('A' + value % 26 ) + result; value /= 26; } return result; } 

为了满足A为1而不是0的要求,我添加了 – 到while循环条件,并从循环结束中删除了值 – 如果有人为了自己的目的想要这个为0,你可以反转变化,或者只是添加值++; 在整个方法的开头。

从int获取字母值可以简单地完成:

 (char)('@' + i) 

另一个变种:

 private String getCharForNumber(int i) { if (i > 25 || i < 0) { return null; } return new Character((char) (i + 65)).toString(); } 

您可以将输入转换为基数26(Hexavigesimal)并将每个“数字”单独转换回基数10并应用ASCII映射。 由于A映射为0,您将得到结果A,B,C,…,Y,Z,BA,BB,BC,…等,根据您对输入值的要求,这可能是也可能不合适> 26,因为认为AA在Z之后出现可能是自然的。

 public static String getCharForNumber(int i){ // return null for bad input if(i < 0){ return null; } // convert to base 26 String s = Integer.toString(i, 26); char[] characters = s.toCharArray(); String result = ""; for(char c : characters){ // convert the base 26 character back to a base 10 integer int x = Integer.parseInt(Character.valueOf(c).toString(), 26); // append the ASCII value to the result result += String.valueOf((char)(x + 'A')); } return result; } 

这不是一个答案,而是我制作的一些有用/相关的代码。 当你运行它并在命令行中输入任何字符时,它返回getNumericValue(char) …这似乎与ASCII表不同,所以要注意。 无论如何,不​​是对你的问题的直接回答,但希望有用:

 import java.lang.*; import java.util.*; /* charVal.java */ //infinite loops. whenever you type in a character gives you value of //getNumericValue(char) // //ctrl+c to exit public class charVal { public static void main(String[] args) { Scanner inPut = new Scanner(System.in); for(;;){ char c = inPut.next().charAt(0); System.out.printf("\n %s = %d \n", c, Character.getNumericValue(c)); } } } 
 public static String abcBase36(int i) { char[] ALPHABET = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray(); int quot = i / 36; int rem = i % 36; char letter = ALPHABET[rem]; if (quot == 0) { return "" + letter; } else { return abcBase36(quot - 1) + letter; } } 

另一种从0开始并返回String

 public static String getCharForNumber(int i) { return i < 0 || i > 25 ? "?" : String.valueOf((char) ('A' + i)); } 

你可以尝试这样:

 private String getCharForNumber(int i) { CharSequence css = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; if (i > 25) { return null; } return css.charAt(i) + ""; }