2013-08-01 45 views
75

下面的代码片段烧焦,转换int在Java的

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

+6

“*转换一个int为char *?” 也许'B =(炭)('0'+ a)',但只适用于'0 <= a <= 9'。 – johnchen902

+4

十进制值01是非打印字符;它工作正常。 – apraetor

回答

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

将打印出ascii值为1的char(不可打印的开始标题字符)。

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

将打印出的字符与ASCII值49(一个对应于“1”)

如果要转换数字(0-9),您可以添加48到它和演员阵容,或类似Character.forDigit(a, 10);

如果你想转换一个int ascii值,你可以使用Character.toChars(48)为例。

+2

'System.out.println('b'+ 3);'我如何使用println获取'b3'而不是'101'?任何其他方式,而不是printf? – UnKnown

+2

@UnKnown你需要使它成为一个字符串而不是char,如下所示System.out.println(“b”+ 3); – Haggra

0

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

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

你可能会使用一个字符串,而不是一个字符,并使用会更好Java的内置toString()方法:

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

这将工作无论你的系统编码,并为多位数工作。

+0

对不起,但一个字符不是int,因为它是由不同数量的字节组成的(快速参考[char-int representation - stackoverflow](http://stackoverflow.com/questions/17166393/byte-char-int -in-java的位表示))。 char可以用数字表示,你是对的,但它不是一个整数。 – morels

+0

另外,我想你可能会发现第二行应该是“String b = Integer.toString(a);” – Faulty

+0

char数据类型在[java.lang.Character](https://docs.oracle.com/javase/8/docs/api/java/lang/Character.html)中定义良好,并且与int的关系和unicode代码点和代码单元。 – Ian

9
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); 

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

对不起,如果我的英语没有很好地解释希望它能帮助你。

27

我的答案与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'。你可以用这种方式将任何数字转换为字符,比使用.toString()方法,然后通过.charAt()方法减去数字更聪明更好。

25

好像你正在寻找Character.forDigit方法:

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

还有可以从一个字符转换回为int的方法:

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

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

+0

@ProgrammingNub定义“int的值”。你不想让它打印数字4吗?或者你想打印int的Ascii值,以便'65'打印'A'?因为我的答案显示了这个问题要求的预期行为。看到https://ideone.com/09LAFR –

1

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

-2

如果你想一个字符转换成其相应的整数,你可以这样做:

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

这是因为在ASCII有不能正常打印一些项目。

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

+2

对不起,但你只是复制粘贴旧的答案... – Miki

0

当你键入投整数烧焦它会返回INT的ASCII值(一旦经过ASCII表更好地理解)

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

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

    //output- D 
+0

排序......'char'是一个UTF-16代码单元。 68作为UTF-16代码单元是唯一代表Unicode代码点的代码单元[U + 0044](http://www.fileformat.info/info/unicode/char/0044/index.htm)。 System.out会将文本的编码更改为默认编码(可能与程序运行的终端/控制台相匹配)。 println需要一个字符并尝试对其进行编码。由于char是一个完整的代码点,它可以尝试。由于U + 0044几乎是所有字符集中的一个字符,所以应该成功地将它送到未加入的终端。与ASCII无关。 –

0

,如果你想打印基于ASCII字符在他们的ascii代码上,不想超越(比如unicode字符),你可以将你的变量定义为一个字节,然后使用(char)转换。即:

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

BTW,对于字母的ASCII码 'A' 是65

1

如果我们谈论的是类类型 - 不是基本类型,下面的技巧有许多工作要做:

Integer someInt; 
Character someChar; 

someChar = (char)Integer.parseInt(String.valueOf(someInt); 
0
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); 
     } 
    } 
} 
+2

请提供解释,而不仅仅是代码转储。 –

+0

尽管这段只有代码的帖子可能会回答这个问题,但请为此解释原因。这将有助于未来的用户评估他们的情况。 –

0

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

如果没有,然后让它。

for e.g. if int i=1 

然后添加64到它,使之成为 'A' 65 = ASCII值 然后使用

char x = (char)i; 

print x 

// 'A' will be printed