2011-10-08 15 views
93

Ho un int int l'intervallo 0-255 e voglio creare una stringa (di lunghezza 1) in modo che il valore ASCII di questo singolo carattere sia il numero intero specificato.Come convertire il codice ASCII (0-255) in una stringa del carattere associato?

C'è un modo semplice per farlo in Java?

esempio:

65 -> "A" 
102 -> "f" 
+3

questo non è un duplicato come menzionato sopra. Questa non è la conversione da numero intero ma da char (ascii) –

+10

* Non * un duplicato di "Come convertire da int a String?" ... comunque, FWIW, ASCII è solo a 7 bit con valori [0, 127]; -) –

+0

@phooji Penso che quel post sais come convertire 1 -> "1" ecc ' – Belgi

risposta

181
+0

Per piattaforme basate su MIDP 2/CLDC 1.1 (che non hanno 'Character.toString (char)', http://stackoverflow.com/a/6210938/923560 fornisce soluzioni aggiuntive – Abdull

+0

Qual è il motivo per il ' char) 'designazione? In altre parole, perché non posso semplicemente mettere' Character.toString (i); '? (Java noob) –

+0

perché' Character.toString' non accetta gli – behelit

24

String.valueOf(Character.toChars(int))

Supponendo che il numero intero è, come dici tu, tra 0 e 255, si otterrà un array con un singolo carattere torna da Character.toChars, che diventerà una stringa a carattere singolo quando passata a String.valueOf.

Utilizzando Character.toChars è preferibile ai metodi che coinvolgono un cast da int a char (cioè (char) i) per una serie di motivi, tra cui quello Character.toChars genera un IllegalArgumentException se non si riesce a convalidare il numero intero, mentre il cast sarà ingoiare l'errore (per il narrowing primitive conversions specification), potenzialmente dando un risultato diverso da quello che intendi.

+0

Supponendo che il numero intero sia nell'intervallo compreso tra 0 e 255 (come affermi di fare ... e come specifica la domanda), non è necessario e non ottimale usare 'toChars'. –

+5

Hai completamente ragione che qualcosa come 'Character.toString ((char) i)' sia più veloce di 'String.valueOf (Character.toChars (i))'. L'esecuzione di un rapido benchmark per la conversione di 1.000.000 di numeri casuali nell'intervallo specificato (100 volte, per essere sicuri) sulla mia macchina fornisce un tempo medio di 153,07 nanosecondi rispetto a 862,39 nanosecondi. Tuttavia, in qualsiasi applicazione interessante, ci saranno cose molto più importanti da ottimizzare. Il valore aggiunto della gestione sicura e deterministica e la facilità di espansione al di fuori dell'intervallo [0,255] dovrebbero essere superiori ai minori risultati in termini di prestazioni. – zjs

4
new String(new char[] { 65 })) 

Vi ritroverete con una stringa di lunghezza, il cui singolo carattere ha la (ASCII) Codice 65. In caratteri Java sono tipi di dati numerici.

42

System.out.println((char)65); sarebbe stampare "A"

+0

Suggerimento per REPL: Se si utilizza JShell (Java 9), è possibile omettere System.out. Basta digitare '(char) 65' per scoprire di che carattere si tratta. – DavidS

1

Si può scorrere dalla a alla z come questo

int asciiForLowerA = 97; 
int asciiForLowerZ = 122; 
for(int asciiCode = asciiForLowerA; asciiCode <= asciiForLowerZ; asciiCode++){ 
    search(sCurrentLine, searchKey + Character.toString ((char) asciiCode)); 
} 
0

Un modo più semplice di fare lo stesso:

cast di tipo integer a carattere, diciamo int n essere il numero intero, quindi:

Char c=(char)n; 
System.out.print(c)//char c will store the converted value. 
6
int number = 65; 
char c = (char)number; 

è una semplice soluzione

-1

Questo è un esempio, che mostra che convertendo un int a char, si può determinare il carattere corrispondente a un codice ASCII.

public class sample6 
{ 
    public static void main(String... asf) 
    { 

     for(int i =0; i<256; i++) 
     { 
      System.out.println(i + ". " + (char)i); 
     } 
    } 
} 
-1

risposta superiore solo vicino alla risoluzione del problema. ecco la risposta:

Integer.decode (Character.toString (char c));

0
for (int i = 0; i < 256; i++) { 
     System.out.println(i + " -> " + (char) i); 
    } 

    char lowercase = 'f'; 
    int offset = (int) 'a' - (int) 'A'; 
    char uppercase = (char) ((int) lowercase - offset); 
    System.out.println("The uppercase letter is " + uppercase); 

    String numberString = JOptionPane.showInputDialog(null, 
      "Enter an ASCII code:", 
      "ASCII conversion", JOptionPane.QUESTION_MESSAGE); 

    int code = (int) numberString.charAt(0); 
    System.out.println("The character for ASCII code " 
      + code + " is " + (char) code); 
+0

Spiega la tua risposta per favore – want2learn

Problemi correlati