Comment convertir le code ASCII (0-255) en son caractère correspondant?

135

Comment puis-je convertir, en Java, le code ASCII (qui est un entier de la plage [0, 255]) en son caractère ASCII correspondant?

Par exemple:

65  -> "A"
102 -> "f"
Belgique
la source
3
ce n'est pas un double comme mentionné ci-dessus. Ce n'est pas une conversion d'entier mais de char (ascii)
Chathuranga Chandrasekara
11
Pas un double de "Comment convertir de int en chaîne?" ... de toute façon, FWIW, ASCII est seulement 7 bits avec des valeurs [0, 127] ;-)
1
@phooji Je pense que ce post sais comment convertir 1 -> "1" etc '
Belgi
1
@pst - c'est étendu ASII ;-)
Belgi
3
@Belgi - vous devrez indiquer explicitement votre encodage si vous souhaitez transcoder correctement les valeurs 128-255. Le terme «ASCII étendu» n'a pas de sens.
McDowell

Réponses:

244

Character.toString ((char) i);

Chathuranga Chandrasekara
la source
Pour les plates-formes basées sur MIDP 2 / CLDC 1.1 (qui n'en ont pas Character.toString(char), stackoverflow.com/a/6210938/923560 fournit des solutions supplémentaires.
Abdull
Quelle est la raison de la (char)désignation? En d'autres termes, pourquoi ne puis-je pas simplement mettre Character.toString(i);? (Java noob)
Adam Hughes
1
Notez que cela ne fonctionnera pas pour le Integertype, vous obtiendrez une erreur "java.lang.Integer ne peut pas être converti en java.lang.Character". Ajouter un casting au intpremier, par exemple: Character.toString((char)(int)myInteger);
gbmhunter
1
Les ivaleurs (0-255) proviendraient du jeu de caractères ISO-8859-1. (Le demandeur a refusé d'identifier quel "ASCII étendu" [terme vague] était recherché, sauf en acceptant cette réponse.)
Tom Blodget
59

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

RylandAlmanza
la source
2
Conseil REPL: si vous utilisez JShell (Java 9), vous pouvez omettre System.out. Tapez simplement (char) 65pour savoir de quel personnage il s'agit.
DavidS
2
La question n'est pas d'imprimer mais de convertir.
iAmLearning du
29

String.valueOf(Character.toChars(int))

En supposant que l'entier est, comme vous le dites, entre 0 et 255, vous obtiendrez un tableau avec un seul caractère en retour Character.toChars, qui deviendra une chaîne à un seul caractère une fois passé à String.valueOf.

L'utilisation Character.toCharsest préférable aux méthodes impliquant un transtypage de intvers char(c'est- à -dire (char) i) pour un certain nombre de raisons, y compris qui Character.toCharslèvera un IllegalArgumentExceptionsi vous ne parvenez pas à valider correctement l'entier tandis que le transtypage avalera l'erreur (selon la spécification des conversions primitives restrictives ), donnant potentiellement une sortie autre que ce que vous vouliez.

zjs
la source
En supposant que l'entier est compris entre 0 et 255 (comme vous le dites ... et comme le précise la question), il est inutile et sous-optimal à utiliser toChars.
Stephen C
5
Vous avez tout à fait raison de dire que quelque chose comme Character.toString((char) i)est plus rapide que String.valueOf(Character.toChars(i)). L'exécution d'un test rapide de conversion de 1 000 000 d'entiers aléatoires dans la plage donnée (100 fois, pour être sûr) sur ma machine donne un temps moyen de 153,07 nanosecondes contre 862,39 nanosecondes. Cependant, dans toute application intéressante, il y aura des choses bien plus importantes à optimiser. La valeur ajoutée de la manipulation sûre et déterministe et de la facilité d'expansion en dehors de la plage de [0,255] si elle est requise l'emporte sur le moindre impact sur les performances.
zjs
8
int number = 65;
char c = (char)number;

c'est une solution simple

Athéna
la source
4
    new String(new char[] { 65 })

Vous vous retrouverez avec une chaîne de longueur un, dont le caractère unique a le code (ASCII) 65. En Java, les caractères sont des types de données numériques.

Paul Cager
la source
1

On peut itérer de a à z comme ça

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

Une façon plus simple de faire de même:

Tapez cast entier en caractère, int nsoit l'entier, puis:

Char c=(char)n;
System.out.print(c)//char c will store the converted value.
Entriple Aardee
la source
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);
Kazım Fuat Akdemir
la source
Expliquez votre réponse s'il vous plaît
want2learn
0

Pourquoi ne pas le simplifier à une méthode qui renvoie le caractère ascii?

public char toAscii (int input) {
    return (char)input;
}
Saphir_Brique
la source
-1

Voici un exemple, qui montre qu'en convertissant un int en char, on peut déterminer le caractère correspondant en code ASCII.

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

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

réponse supérieure seulement près de résoudre le problème. voici votre réponse:

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

Maximilien Notar
la source