2010-03-28 39 views
6

我們可以將字符轉換爲與ASCII值相同的整數,但是我們可以做相反的事情,即將給定的ASCII值轉換爲其等同的字符?我們可以將整數轉換爲字符

public String alphabets(int[] num) 
{ 
char[] s = new char[num.length]; 
String str = new String(); 
for(int i=0; i< num.length; i++) 
{ 
    s[i] = 'A' + (char)(num[i]- 1); 
    str += Character.toString(s[i]); 
} 
return str;   
} 

顯示可能失去精度誤差的...

+2

它說失去精度錯誤,因爲int可以容納比字符更大的數字。所以你可以將任何角色投射到一個int,但是整個整數的上限範圍太大而不能投射到角色。 – Joel 2010-03-28 22:48:36

回答

8

轉換到/從:

int i = 65; 
char c = (char)i; 

char c = 'A'; 
int i = (int)c; 
+3

nopes,它表示可能丟失精度 – higherDefender 2010-03-28 17:01:05

+7

@ D.J。,可能的精度損失不適用於ASCII字符範圍。 – Yishai 2010-03-28 17:06:01

1

不鑄造char工作?

+0

nopes它說可能損失精度 – higherDefender 2010-03-28 17:00:19

+0

真的嗎?當我用java/javac 1.6進行嘗試時工作。 – 2010-03-28 17:09:18

0

有幾種方法。 看看字符包裝類。 Character.digit()可能會訣竅。 其實這個伎倆!

Integer.valueOf('a') 
+3

D.J.是要求一個字符的整數,而不是相反。 – Ricket 2010-03-28 17:28:05

3

Character.toChars

public static char[] toChars(int codePoint) 

指定字符(Unicode代碼點)轉換爲存儲在字符數組其UTF-16表示。

5

你居然甚至不需要鑄造:

char c = 126; 

其實這似乎爲Unicode字符正常工作。例如嘗試:

System.out.println((int) 'โ'); // outputs 3650, a thai symbol 
char p = 3650; 
System.out.println(p); // outputs the above symbol 
6

的錯誤比你最初會覺得更加複雜,因爲它實際上是「+」操作符,導致「精度誤差的可能的損失」。

s[i] = (char)('A' + (num[i]- 1));


說明
在在Java Language Specification§5.6.2 Binary Numeric Promotion第一項目列表中指出,:

當經營者申請 可如果轉換移動解決錯誤二進制數字提升爲一對操作數[...]遵循以下規則,按順序使用擴展轉換(§5.1.2)根據需要轉換操作數:

  • 如果任何操作數是引用類型,則執行拆箱轉換(第5.1.8節)。然後:
  • 如果任一操作數的類型爲double,則另一個操作數轉換爲double。
  • 否則,如果任一操作數的類型爲float,則另一個操作數轉換爲float。
  • 否則,如果任一操作數的類型爲long,則另一個操作數轉換爲long。
  • 否則,兩個操作數都轉換爲int類型。

在接下來的項目列表則指出:

二元數值提升是對某些運營商的操作數執行:

  • 乘法運算符*,/和%(§15.17)
  • 加法和減法運算符用於數字類型+和 - (§15.18.2)
  • 數值比較運算符,和> =(§15.20.1)
  • 數值相等運算符==和!=(§15.21.1)
  • 整數位運算符&,^和| (§15.22.1)
  • 在某些情況下,條件運算符? :(§15.25)

在你的情況下,這意味着:

s[i] = (int)'A' + (int)((char)(num[i] - (int)1));
因此錯誤。