2010-03-28 27 views
6

possiamo convertire il carattere in un numero intero equivalente al valore ASCII dello stesso, ma possiamo fare il contrario, ovvero convertire un dato valore ASCII nel suo equivalente carattere?possiamo convertire il numero intero nel carattere

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;   
} 

mostra possibile perduta di errore di precisione ...

+2

Dice la perdita di errore di precisione perché un int può contenere un numero maggiore di un carattere. Quindi puoi lanciare qualsiasi personaggio su un int, ma la gamma superiore di int è troppo grande per essere lanciata su un personaggio. – Joel

risposta

8

Per convertire da/per:

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

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

nopes, si dice possibile perdita di precisione – higherDefender

+7

@ D.J., La possibile perdita di precisione non si applica al range di caratteri ASCII. – Yishai

1

Sono esclusi colata a char lavoro?

+0

nopes dice possibile perdita di precisione – higherDefender

+0

Davvero? Funziona quando provo con java/javac 1.6. –

0

Ci sono diversi modi. Guarda la classe wrapper di caratteri. Character.digit() può fare il trucco. In realtà questo fa il trucco !!

Integer.valueOf('a') 
+3

D.J. sta chiedendo un intero a un personaggio, non il contrario. – Ricket

3

Character.toChars:

public static char[] toChars(int codePoint) 

Converte il carattere specificato (Unicode punto codice) nella sua rappresentazione UTF-16 memorizzato in una matrice char.

5

In realtà non è nemmeno necessario un cast:

char c = 126; 

E questo in realtà sembra funzionare per i caratteri unicode pure. Per esempio provare:

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

L'errore è più complesso di quanto si potrebbe inizialmente pensare, perché in realtà è l'operatore '+' che causa la "possibile perdita di errore di precisione". L'errore può essere risolto se il cast è spostato:

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


Spiegazione
Nel primo elenco proiettile del §5.6.2 Binary Numeric Promotion nel Java Language Specification si afferma che:

Quando si applica un operatore promozione numerica binaria a una coppia di operandi [...] si applicano le seguenti regole, in ordine, utilizzando la conversione di ampliamento (§5.1.2) per convertire gli operandi come necessario:

  • Se uno qualsiasi degli operandi è di un tipo di riferimento, viene eseguita la conversione di unboxing (§5.1.8). Quindi:
  • Se uno degli operandi è di tipo double, l'altro viene convertito in double.
  • Altrimenti, se uno degli operandi è di tipo float, l'altro viene convertito in float.
  • Altrimenti, se uno degli operandi è di tipo lungo, l'altro viene convertito in long.
  • In caso contrario, entrambi gli operandi vengono convertiti in tipo int.

Nella prossima lista proiettile si precisa che:

promozione numerico binario viene eseguita su operandi di alcuni operatori:

  • Gli operatori moltiplicativi *,/e% (§15.17)
  • Gli operatori di addizione e sottrazione per tipi numerici + e - (§15.18.2)
  • Gli operatori di confronto numerici, e> = (§15.20.1)
  • Operatori di uguaglianza numerica == e! = (§15.21.1)
  • Gli operatori bit a bit interi &, ^, and | (§15.22.1)
  • In alcuni casi, l'operatore condizionale? : (§15.25)

Nel tuo caso, che si traduce in:

s[i] = (int)'A' + (int)((char)(num[i] - (int)1));
da qui l'errore.

Problemi correlati