155

下面是一个代码片段,

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,我该怎么办?

4

17 回答 17

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

将打印出带有Unicode 代码点1 的字符(开头字符,不可打印;请参阅此表:C0 Controls and Basic Latin,与 ASCII 相同)

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

将打印出带有 Unicode 代码点 49 的字符(对应于 '1')

如果你想转换一个数字(0-9),你可以添加 48 并强制转换,或者类似Character.forDigit(a, 10);.

如果您想将一个int视为 Unicode 代码点的转换,您可以使用Character.toChars(48)例如。

于 2013-08-01T03:52:38.493 回答
78

我的回答类似于 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. char49 的 ASCII 等价物是“1”。您可以通过这种方式将任何数字转换为字符,并且比使用.toString()方法然后通过方法减去数字更智能和更好的.charAt()方法。

于 2015-06-04T21:05:40.687 回答
48

看来您正在寻找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也称为)。

于 2015-10-09T06:51:51.620 回答
10
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 类型。我使用索引为 0 的 charAt(),因为该字符串中的唯一值是“a”,而且如您所知,“a”在该字符串中的位置从 0 开始。

对不起,如果我的英语解释得不好,希望对你有所帮助。

于 2014-11-21T03:46:03.943 回答
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值转换为char :)

于 2021-02-19T18:54:30.830 回答
4
int a = 1;
char b = (char) (a + 48);

在 ASCII 中,每个字符都有自己的编号。char '0' 是十进制的 48,'1' 是 49,依此类推。因此,如果

char b = '2';
int a = b = 50;
于 2018-11-02T16:59:54.383 回答
2

每当您将强制转换整数键入 char 时,它将返回该 int 的 ascii 值(一旦通过 ascii 表更好地理解)

    int a=68;
    char b=(char)a;

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

    //output- D
于 2016-12-29T05:02:58.210 回答
1

如果我们谈论的是类类型 - 而不是原语,则必须完成以下技巧:

Integer someInt;
Character someChar;

someChar = (char)Integer.parseInt(String.valueOf(someInt));
于 2017-12-16T10:06:36.617 回答
1

没有人在这里回答真正的“问题”:您正在正确地将 int 转换为 char;在 ASCII 表中,十进制值 01 是“标题开头”,一个非打印字符。尝试查找 ASCII 表并将 int 值转换为 33 和 7E 之间;这会让你看到角色。

于 2016-09-12T17:28:51.703 回答
0

在java中,char一个int。您的第一个片段打印出与默认字符编码方案(可能是 Unicode)中值 1 对应的字符。Unicode 字符 U+0001 是非打印字符,这就是您看不到任何输出的原因。

如果你想打印出字符'1',你可以在你使用的编码方案中查找'1'的值。在 Unicode 中,这是 49(与 ASCII 相同)。但这仅适用于数字 0-9。

最好使用 String 而不是 char,并使用 Java 的内置toString()方法:

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

无论您的系统编码是什么,这都适用,并且适用于多位数字。

于 2013-08-01T04:42:39.600 回答
0

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

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

然后,将其转换Stringchar.

char newValue = value.charAt(0);

您可以通过这种方式避免空输出...

System.out.println(newValue);
于 2020-12-06T22:20:35.173 回答
0

确保整数值是字母/字符的 ASCII 值。

如果没有,那就做吧。

for e.g. if int i=1

然后将 64 添加到它,使其变为 65 = 'A' 的 ASCII 值 然后使用

char x = (char)i;

print x

// 'A' will be printed 
于 2018-02-20T19:12:25.077 回答
0

有一种方法int可以转换为char甚至不使用 ASCII 值。

例子:

int i = 2;
char ch = Integer.toString(i).charAt(0);
System.out.println(ch);

解释 :

首先将整数转换为字符串,然后使用 String 函数charAt()从字符串中提取字符。由于整数只有一个数字,因此索引0被赋予charAt()函数。

于 2020-08-26T11:42:07.887 回答
0

如果您想根据其 ascii 代码打印 ascii 字符并且不想超出此范围(如 unicode 字符),您可以将您的变量定义为一个字节,然后使用 (char) 转换。IE:

public static void main(String[] args) {
    byte b = 65;
    for (byte i=b; i<=b+25; i++) {
        System.out.print((char)i + ", ");
    }

顺便说一句,字母“A”的ASCII码是65

于 2017-06-29T14:15:09.160 回答
-1

查看以下程序以获得完整的转换概念

class typetest{
    public static void main(String args[]){
        byte a=1,b=2;
        char c=1,d='b';
        short e=3,f=4;
        int g=5,h=6;
        float i;
        double k=10.34,l=12.45;
        System.out.println("value of char variable c="+c);
        // if we assign an integer value in char cariable it's possible as above
        // but it's not possible to assign int value from an int variable in char variable 
        // (d=g assignment gives error as incompatible type conversion)
        g=b;
        System.out.println("char to int conversion is possible");
        k=g;
        System.out.println("int to double conversion is possible");
        i=h;
        System.out.println("int to float is possible and value of i = "+i);
        l=i;
        System.out.println("float to double is possible");
    }
}

希望,它至少会有所帮助

于 2019-07-04T15:30:05.077 回答
-2

如果要将字符转换为其对应的整数,可以执行以下操作:

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

发生这种情况是因为在 ASCII 中有些项目无法正常打印。

例如,数字 97 到 122 是对应于小写字母 a 到 z 的整数。

于 2016-10-26T22:57:41.220 回答
-2
public class String_Store_In_Array 
{
    public static void main(String[] args) 
    {
        System.out.println(" Q.37 Can you store string in array of integers. Try it.");

        String str="I am Akash";
        int arr[]=new int[str.length()];
        char chArr[]=str.toCharArray();
          char  ch;
        for(int i=0;i<str.length();i++)
        {

            arr[i]=chArr[i];
        }
        System.out.println("\nI have stored it in array by using ASCII value");
        for(int i=0;i<arr.length;i++)
        {

            System.out.print(" "+arr[i]);
        }
        System.out.println("\nI have stored it in array by using ASCII value to original content");
        for(int i=0;i<arr.length;i++)
        {
             ch=(char)arr[i];

            System.out.print(" "+ch);
        }
    }
}
于 2018-02-03T15:32:15.187 回答