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

edw*_*yte 31 java

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

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之间126包容性.

如果要从零开始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)


Pet*_*rey 5

我会返回一个字符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 代码。