在Java中将int转换为char

171

以下是一段代码片段,

int a = 1;
char b = (char) a;
System.out.println(b);

但我得到的是空输出。

int a = '1';
char b = (char) a;
System.out.println(b);
我将得到1作为我的输出。
有人能解释一下吗?如果我想像第一个片段那样将int转换为char,该怎么做?

16
如何将一个整型转换为字符型?可能可以使用 b = (char)('0' + a),但是只适用于 0 <= a <= 9 - johnchen902
7
01 的十进制值是一个不可打印字符,它正常工作。 - apraetor
19个回答

141
int a = 1;
char b = (char) a;
System.out.println(b);

将会输出 Unicode code point 1 的字符(起始标头字符,不可打印; 参见此表:C0控制字符和基本拉丁字母,与ASCII相同)

int a = '1';
char b = (char) a;
System.out.println(b);

将打印出Unicode代码点为49的字符(对应于“1”的代码点)。
如果要转换数字(0-9),可以将其加上48并转换类型,或者使用类似于Character.forDigit(a, 10);的方法。
如果要将一个被视为Unicode代码点的int转换,例如,您可以使用Character.toChars(48)

3
我可以进行翻译。为了让输出结果变成b3而不是101,您需要使用如下代码:System.out.println('b' + "3");。除了使用printf之外,还有其他的方法吗?当然可以,例如使用StringBuilder类来连接字符和字符串:System.out.println(new StringBuilder().append('b').append(3).toString()); - Asif Mushtaq
3
请将其修改为字符串格式,而不是字符格式,如下所示:System.out.println("b" + 3); - Haggra
Character.toChars 操作的是 Unicode 代码点,而不是 ASCII 值。如果你只是将 int 强制转换为 char,则仅对 BMP 获取相同结果。 - weaknespase

86

我的答案与jh314的答案类似,但我会解释地更深入一些。

在这种情况下,你应该做的是:

int a = 1;
char b = (char)(a + '0');
System.out.println(b);

在这里使用'0',因为字符实际上是由ASCII值表示的。'0'是一个字符,它的值为48。

我们输入了(a + '0'),为了将它们相加,Java 将'0'转换为其ASCII值,即48,而a是1,所以和为49。然后我们做的是:

(char)(49)

我们将int转换为char。 49的ASCII等效值为'1'。您可以使用此方法将任何数字转换为char,并且比使用.toString()方法然后使用.charAt()方法减去数字更聪明、更好。


52

看起来你正在寻找Character.forDigit方法:

final int RADIX = 10;
int i = 4;
char ch = Character.forDigit(i, RADIX);
System.out.println(ch); // Prints '4'

还有一种方法可以将char转换回int:

int i2 = Character.digit(ch, RADIX);
System.out.println(i2); // Prints '4'

请注意,通过更改 RADIX,您还可以支持十六进制(基数16)和任何基数高达36(或者也称为Character.MAX_RADIX)。


@ProgrammingNub, 请定义"the int's value"。难道您想打印数字4吗?还是想打印整数的Ascii值,以便65打印为A?因为我的答案针对该问题的要求打印了预期的行为。请参见https://ideone.com/09LAFR。 - Simon Forsberg

13
int a = 1;
char b = (char) a;
System.out.println(b);

嗨,我也遇到了同样的问题,但我所做的是以下代码。

int a = 1
char b = Integer.toString(a).charAt(0);
System.out.println(b);

使用这个方法,您可以将十进制值作为char类型获得。我使用charAt()和索引0,因为该字符串中唯一的值是'a',并且正如您所知,'a'在该字符串中的位置从0开始。

如果我的英语没有很好地解释清楚,对不起,希望它能帮到您。


5

如果您希望将其打印为“1”或“a”。

如果您希望以“1”作为输入:

int a = 1;
char b = (char)(a + '0');
System.out.println(b);

如果您想将'a'作为输入,则应执行以下操作:
int a = 1;
char b = (char)(a-1 + 'a');
System.out.println(b);

Java可以将ASCII值转换为字符 :)


4
int a = 1;
char b = (char) (a + 48);

在ASCII中,每个字符都有自己的编号。字符'0'用十进制表示为48,'1'为49,以此类推。因此,如果...
char b = '2';
int a = b = 50;

2
无论何时将整数强制转换为字符,它都会返回该整数的ASCII值(可以通过查阅ASCII表格来更好地理解)。
    int a=68;
    char b=(char)a;

    System.out.println(b);//it will return ascii value of 68

    //output- D

2
有点像…… char 是一个 UTF-16 代码单元。68 作为一个 UTF-16 代码单元是唯一需要表示 Unicode 码点 U+0044 的代码单元。System.out 将文本的编码更改为默认编码(可能与程序运行的终端/控制台匹配)。println 接受一个 char 并尝试对其进行编码。由于 char 是一个完整的代码点,因此可以尝试。由于 U+0044 是几乎所有字符集中的字符,因此应该能够成功将其传输到终端而不会出现乱码。这与 ASCII 无关。 - Tom Blodget

2
没有人回答这里真正的“问题”:您确实正确地将int转换为char;在ASCII表中,十进制值01是“标题开始”,它是一个不可打印字符。尝试查找ASCII表并将int值转换为33到7E之间的值; 这样将会给您一些可以查看的字符。

1
如果我们说的是类类型 - 而不是基本类型,那么需要执行以下技巧:
Integer someInt;
Character someChar;

someChar = (char)Integer.parseInt(String.valueOf(someInt));

不需要将其作为字符串返回,而且你的括号数量不匹配。 - Simon Forsberg
西蒙,"括号"。然后怎么办? - matua

1

首先,将 int(或其他类型)转换为 String

int a = 1;
String value = String.valueOf(a);

然后,将该字符串转换为字符(char)。
char newValue = value.charAt(0);

您可以通过这种方式避免空输出...
System.out.println(newValue);

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