Come convertire il codice ASCII (0-255) nel carattere corrispondente?


135

Come posso convertire, in Java, il codice ASCII (che è un numero intero compreso nell'intervallo [0, 255]) nel corrispondente carattere ASCII?

Per esempio:

65  -> "A"
102 -> "f"

3
questo non è un duplicato come menzionato sopra. Questa non è una conversione da intero ma da char (ascii)
Chathuranga Chandrasekara

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

1
@phooji Penso che quel post sia come convertire 1 -> "1" ecc.
Belgi

1
@pst - è esteso ASII ;-)
Belgi

3
@Belgi - dovrai dichiarare esplicitamente la tua codifica se desideri transcodificare correttamente i valori 128-255. Il termine "ASCII esteso" non è significativo.
McDowell,

Risposte:


244

Per le piattaforme basate su MIDP 2 / CLDC 1.1 (che non dispongono di Character.toString(char), stackoverflow.com/a/6210938/923560 fornisce soluzioni aggiuntive.
Abdull

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

1
Nota che questo non funzionerà per il Integertipo, otterrai un errore "java.lang.Integer non può essere trasmesso a java.lang.Character". Aggiungi un cast per intprimo, ad esempio: Character.toString((char)(int)myInteger);
gbmhunter

1
I ivalori (0-255) provengono dal set di caratteri ISO-8859-1. (La domanda che si è chiesta ha rifiutato di identificare quale "ASCII esteso" [termine vago] era voluto, tranne accettando questa risposta.)
Tom Blodget,

59

System.out.println((char)65); stamperebbe "A"


2
Suggerimento REPL: se si utilizza JShell (Java 9), è possibile omettere System.out. Basta digitare (char) 65per scoprire di che personaggio si tratta.
DavidS

2
La domanda non riguarda la stampa ma la conversione.
iAmLearning,

29

String.valueOf(Character.toChars(int))

Supponendo che il numero intero sia, come dici tu, tra 0 e 255, otterrai un array con un solo carattere di ritorno Character.toChars , che diventerà una stringa di un singolo carattere quando passerà a String.valueOf.

L'uso Character.toCharsè preferibile ai metodi che coinvolgono un cast da inta char(cioè (char) i) per una serie di motivi, incluso quello che Character.toCharsgenererà un IllegalArgumentExceptionerrore se non si convalida correttamente l'intero mentre il cast inghiottirà l'errore (secondo la specifica di conversione delle primitive restrittive ), potenzialmente dando un output diverso da quello che intendevi.


Supponendo che l'intero sia compreso nell'intervallo da 0 a 255 (come si afferma che si fa ... e come specificato dalla domanda), non è necessario e non è ottimale da utilizzare toChars.
Stephen C,

5
Hai perfettamente ragione che qualcosa di simile Character.toString((char) i)è più veloce di String.valueOf(Character.toChars(i)). Eseguire un rapido benchmark di conversione di 1.000.000 di numeri casuali nell'intervallo specificato (100 volte, per sicurezza) sulla mia macchina offre un tempo medio di 153,07 nanosecondi contro 862,39 nanosecondi. Tuttavia, in qualsiasi applicazione interessante, ci saranno cose molto più importanti da ottimizzare. Il valore aggiunto della manipolazione sicura e deterministica e della facilità di espansione al di fuori dell'intervallo [0,255] nel caso in cui fosse necessario supera il minor impatto sulle prestazioni.
zjs,

8
int number = 65;
char c = (char)number;

è una soluzione semplice


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

Si finirà con una stringa di lunghezza una, il cui singolo carattere ha il codice (ASCII) 65. In Java i caratteri sono tipi di dati numerici.


1

Si può iterare dalla a alla z in questo modo

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

1

Un modo più semplice di fare lo stesso:

Digita cast intero su carattere, lascia che int nsia l'intero, quindi:

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

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

Spiega la tua risposta per favore
want2learn

0

Perché non semplificarlo con un metodo che restituisce il carattere ASCII?

public char toAscii (int input) {
    return (char)input;
}

-1

Questo è un esempio, che mostra che convertendo un int in char, si può determinare il carattere corrispondente in 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 a risolvere il problema. ecco la tua risposta:

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.