如何将ASCII码(0-255)转换为对应的字符?

162

在Java中,如何将ASCII码(一个位于[0, 255]范围内的整数)转换为其对应的ASCII字符?

例如:

65  -> "A"
102 -> "f"

3
这不是如上所述的重复内容。这不是从整数转换,而是从字符(ASCII)转换。 - Chathuranga Chandrasekara
11
这不是“如何将整数转换为字符串”的重复问题... 无论如何,值得一提的是,ASCII 只有7位,取值范围为[0,127];-) - user166390
1
@phooji,我认为那篇帖子解释了如何将1->“1”等进行转换。 - Belgi
1
@pst - 这是扩展的ASCII;-) - Belgi
@Belgi:也许这个更好一些:https://dev59.com/l3RA5IYBdhLWcg3wxA5N。 - phooji
3
如果你想正确转码128-255的值,你需要明确指定编码方式。"扩展ASCII"一词没有实际意义。 - McDowell
10个回答

286

对于基于MIDP 2 / CLDC 1.1平台的设备(这些设备没有Character.toString(char)),http://stackoverflow.com/a/6210938/923560提供了额外的解决方案。 - Abdull
(char) 的指定有什么原因呢?换句话说,为什么我不能只写 Character.toString(i); 呢?(Java 新手) - Adam Hughes
1
请注意,这对于“Integer”类型无效,您将收到“java.lang.Integer cannot be cast to java.lang.Character”的错误。首先添加一个转换为“int”,例如:Character.toString((char)(int)myInteger); - gbmhunter
1
i 值(0-255)将来自 ISO-8859-1 字符集。(问题提问者拒绝确定所需的“扩展 ASCII”[模糊术语],除非接受此答案。) - Tom Blodget

67

System.out.println((char)65);

的输出结果是"A"。


3
REPL提示:如果您正在使用JShell(Java 9),您可以省略System.out。只需输入(char)65即可查找其对应的字符是什么。 - DavidS
3
问题不是关于打印,而是关于转换。 - iAmLearning

38

String.valueOf(Character.toChars(int))

假设整数确实在0到255之间,则使用Character.toChars将返回一个带有单个字符的数组,当传递给String.valueOf时,它将变成一个单字符字符串。

与涉及从intchar的强制转换的方法(即(char) i)相比,使用Character.toChars更可取,原因包括Character.toChars将抛出IllegalArgumentException,如果您未正确验证整数,则会吞下错误(根据缩小原始转换规范),可能会产生不符合预期的输出。

假设整数在0到255的范围内(正如您所述...并且问题指定的),使用toChars是不必要和次优的。 - Stephen C
7
你完全正确,像 Character.toString((char) i) 这样的写法比 String.valueOf(Character.toChars(i)) 更快。在我的机器上对 1,000,000 个给定范围内的随机整数进行转换(为确保安全进行100次),平均时间分别为 153.07 纳秒和 862.39 纳秒。然而,在任何实际应用中,优化更加重要的部分通常会更多。安全、确定性的处理以及容易扩展到 [0,255] 范围之外(如果需要)所带来的价值超过了轻微的性能损失。 - zjs

15
int number = 65;
char c = (char)number;

这是一个简单的解决方案


7
    new String(new char[] { 65 })

你最终会得到一个长度为1的字符串,其单个字符的ASCII码值为65。在Java中,char是数值数据类型。

2

一种更简单的方法:

将整数转换为字符,假设 int n 是整数,那么:

Char c=(char)n;
System.out.print(c)//char c will store the converted value.

1
    for (int i = 0; i < 256; i++) {
        System.out.println(i + " -> " + (char) i);
    }

    char lowercase = 'f';
    int offset = (int) 'a' - (int) 'A';
    char uppercase = (char) ((int) lowercase - offset);
    System.out.println("The uppercase letter is " + uppercase);

    String numberString = JOptionPane.showInputDialog(null,
            "Enter an ASCII code:",
            "ASCII conversion", JOptionPane.QUESTION_MESSAGE);

    int code = (int) numberString.charAt(0);
    System.out.println("The character for ASCII code "
            + code + " is " + (char) code);

请解释你的答案。 - want2learn

1

可以像这样从a到z迭代

int asciiForLowerA = 97;
int asciiForLowerZ = 122;
for(int asciiCode = asciiForLowerA; asciiCode <= asciiForLowerZ; asciiCode++){
    search(sCurrentLine, searchKey + Character.toString ((char) asciiCode));
}

-1

这是一个示例,它展示了通过将int转换为char,可以确定ASCII代码对应的字符。

public class sample6
{
    public static void main(String... asf)
    {

        for(int i =0; i<256; i++)
        {
            System.out.println( i + ". " + (char)i);
        }
    }
}

-1

仅限于解决问题的上面答案。这是您的答案:

Integer.decode(Character.toString(char c));


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接