2013-08-01 46 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