Convertir un entier en caractère en java


124

Voici un extrait de code,

int a = 1;
char b = (char) a;
System.out.println(b);

Mais ce que j'obtiens, c'est une sortie vide.

int a = '1';
char b = (char) a;
System.out.println(b);

J'obtiendrai 1 comme sortie.

Quelqu'un peut-il expliquer cela? Et si je veux convertir un int en caractère comme dans le premier extrait de code, que dois-je faire?


9
" Convertir un int en caractère? " Peut-être b = (char)('0' + a)mais seulement pour 0 <= a <= 9.
johnchen902

6
La valeur décimale 01 est un caractère non imprimable; cela fonctionne correctement.
apraetor le

Réponses:


110
int a = 1;
char b = (char) a;
System.out.println(b);

affichera le caractère avec la valeur ascii 1 (caractère de début d'en-tête, qui n'est pas imprimable).

int a = '1';
char b = (char) a;
System.out.println(b);

affichera le caractère avec la valeur ascii 49 (un correspondant à '1')

Si vous souhaitez convertir un chiffre (0-9), vous pouvez y ajouter 48 et lancer, ou quelque chose du genre Character.forDigit(a, 10);.

Si vous souhaitez convertir une intvaleur as in ascii, vous pouvez utiliser Character.toChars(48)par exemple.


2
System.out.println('b'+3);comment puis-je obtenir à la b3place 101avec println? tout autre moyen à la place printf?
Asif Mushtaq

2
@UnKnown Vous devez en faire une chaîne au lieu d'un caractère comme suit System.out.println ("b" + 3);
Haggra

Character.toCharsfonctionne sur les points de code Unicode, pas sur les valeurs ASCII. Vous obtenez la même chose (pour BMP uniquement) si vous venez de convertir int en char.
lownespase

55

Ma réponse est similaire à la réponse de jh314 mais je vais l'expliquer un peu plus en profondeur.

Ce que vous devez faire dans ce cas est:

int a = 1;
char b = (char)(a + '0');
System.out.println(b);

Ici, nous avons utilisé «0» car les caractères sont en fait représentés par des valeurs ASCII. «0» est un caractère et représenté par la valeur 48.

Nous avons tapé (a + '0')et afin de les additionner, Java a converti '0' en sa valeur ASCII qui est 48 et a est 1 donc la somme est 49. Ensuite, ce que nous avons fait est:

(char)(49)

Nous Casted intà char. L'équivalent ASCII de 49 est «1». Vous pouvez convertir n'importe quel chiffre en caractère de cette manière et c'est une manière plus intelligente et meilleure que d'utiliser la .toString()méthode, puis de soustraire le chiffre par la .charAt()méthode.


42

Il semble que vous cherchiez la Character.forDigitméthode:

final int RADIX = 10;
int i = 4;
char ch = Character.forDigit(i, RADIX);
System.out.println(ch); // Prints '4'

Il existe également une méthode qui permet de convertir un caractère en un entier:

int i2 = Character.digit(ch, RADIX);
System.out.println(i2); // Prints '4'

Notez qu'en changeant le, RADIXvous pouvez également prendre en charge hexadécimal (base 16) et toute base jusqu'à 36 (ou Character.MAX_RADIXcomme on l'appelle également).


@ProgrammingNub Définit "la valeur de l'int". .Vous ne voulez pas qu'il imprime le chiffre 4? Ou souhaitez-vous imprimer la valeur Ascii de l'int, de sorte qu'elle 65s'imprime A? Parce que ma réponse ici imprime le comportement attendu pour les exigences de cette question. Voir ideone.com/09LAFR
Simon Forsberg

10
int a = 1;
char b = (char) a;
System.out.println(b);

hola, eh bien j'ai traversé le même problème mais ce que j'ai fait était le code suivant.

int a = 1
char b = Integer.toString(a).charAt(0);
System.out.println(b);

Avec cela, vous obtenez la valeur décimale sous forme de type char. J'ai utilisé charAt () avec l'index 0 car la seule valeur dans cette chaîne est 'a' et comme vous le savez, la position de 'a' dans cette chaîne commence à 0.

Désolé si mon anglais n'est pas bien expliqué, j'espère que cela vous aidera.


3
int a = 1;
char b = (char) (a + 48);

En ASCII, chaque caractère a son propre numéro. Et le caractère «0» vaut 48 pour le nombre décimal, «1» vaut 49, et ainsi de suite. Donc si

char b = '2';
int a = b = 50;

1

Personne n'a répondu à la vraie "question" ici: vous convertissez correctement int en char; dans la table ASCII, une valeur décimale de 01 est "début de titre", un caractère non imprimable. Essayez de rechercher une table ASCII et de convertir une valeur int entre 33 et 7E; cela vous donnera des personnages à regarder.


1

Chaque fois que vous tapez cast integer to char, il retournera la valeur ascii de cet int (une fois passer par la table ascii pour une meilleure compréhension)

    int a=68;
    char b=(char)a;

    System.out.println(b);//it will return ascii value of 68

    //output- D

2
Une sorte de .... charest une unité de code UTF-16. 68 en tant qu'unité de code UTF-16 est la seule unité de code nécessaire pour représenter le point de code Unicode U + 0044 . System.out changera l'encodage du texte sur l'encodage par défaut (probablement correspondant au terminal / console dans lequel le programme s'exécute). println prend un caractère et tente de l'encoder. Puisque le caractère est un point de code complet, il peut essayer. Étant donné que U + 0044 est un caractère dans presque tous les jeux de caractères, il devrait être réussi à le faire parvenir au terminal sans gargarisme. Rien à voir avec ASCII.
Tom Blodget

0

En java, un char est un int. Votre premier extrait de code imprime le caractère correspondant à la valeur de 1 dans le schéma de codage de caractères par défaut (qui est probablement Unicode). Le caractère Unicode U + 0001 est un caractère non imprimable, c'est pourquoi vous ne voyez aucune sortie.

Si vous souhaitez imprimer le caractère «1», vous pouvez rechercher la valeur de «1» dans le schéma de codage que vous utilisez. En Unicode, il s'agit de 49 (identique à ASCII). Mais cela ne fonctionnera que pour les chiffres 0-9.

Vous feriez peut-être mieux d'utiliser une chaîne plutôt qu'un caractère et d'utiliser la toString()méthode intégrée de Java :

int a = 1;
String b = toString(a);
System.out.println(b);

Cela fonctionnera quel que soit le codage de votre système et fonctionnera pour les nombres à plusieurs chiffres.


1
Désolé mais un char n'est pas un int, car il est composé d'un nombre d'octets différent (représentation rapide de char-int - stackoverflow ). Un caractère peut être représenté par un nombre, vous avez raison, mais ce n'est pas un entier.
morilles

De plus, je pense que vous pouvez trouver que la deuxième ligne devrait se lire "String b = Integer.toString (a);"
Défaut le

Le type de données char est bien défini dans java.lang.Character ainsi que sa relation avec les points de code int et unicode et les unités de code.
Ian

0

si vous souhaitez imprimer des caractères ascii en fonction de leur code ascii et que vous ne voulez pas aller au-delà (comme les caractères unicode), vous pouvez définir votre variable comme un octet, puis utiliser le (char) convert. c'est à dire:

public static void main(String[] args) {
    byte b = 65;
    for (byte i=b; i<=b+25; i++) {
        System.out.print((char)i + ", ");
    }

BTW, le code ascii pour la lettre `` A '' est 65


0

Assurez-vous que la valeur entière est la valeur ASCII d'un alphabet / caractère.

Sinon, faites-le.

for e.g. if int i=1

puis ajoutez-lui 64 pour qu'il devienne 65 = valeur ASCII de 'A' Puis utilisez

char x = (char)i;

print x

// 'A' will be printed 

0

Si nous parlons de types de classes - pas de primitives, l'astuce suivante doit être effectuée:

Integer someInt;
Character someChar;

someChar = (char)Integer.parseInt(String.valueOf(someInt));

Pas besoin d'en faire une chaîne dans le processus, et vous avez un nombre de paranthesis qui ne correspond pas.
Simon Forsberg

Simon, "parenthèses". Conseiller comment alors?
matua le

-1

regardez le programme suivant pour un concept de conversion complet

class typetest{
    public static void main(String args[]){
        byte a=1,b=2;
        char c=1,d='b';
        short e=3,f=4;
        int g=5,h=6;
        float i;
        double k=10.34,l=12.45;
        System.out.println("value of char variable c="+c);
        // if we assign an integer value in char cariable it's possible as above
        // but it's not possible to assign int value from an int variable in char variable 
        // (d=g assignment gives error as incompatible type conversion)
        g=b;
        System.out.println("char to int conversion is possible");
        k=g;
        System.out.println("int to double conversion is possible");
        i=h;
        System.out.println("int to float is possible and value of i = "+i);
        l=i;
        System.out.println("float to double is possible");
    }
}

j'espère que ça aidera au moins quelque chose


-2

Si vous souhaitez convertir un caractère en son entier correspondant, vous pouvez faire quelque chose comme ceci:

int a = (int) 'a';
char b = (char) a;
System.out.println(b);

Cela se produit car en ASCII, certains éléments ne peuvent pas être imprimés normalement.

Par exemple, les nombres 97 à 122 sont des entiers correspondant aux lettres minuscules de a à z.


-2
public class String_Store_In_Array 
{
    public static void main(String[] args) 
    {
        System.out.println(" Q.37 Can you store string in array of integers. Try it.");

        String str="I am Akash";
        int arr[]=new int[str.length()];
        char chArr[]=str.toCharArray();
          char  ch;
        for(int i=0;i<str.length();i++)
        {

            arr[i]=chArr[i];
        }
        System.out.println("\nI have stored it in array by using ASCII value");
        for(int i=0;i<arr.length;i++)
        {

            System.out.print(" "+arr[i]);
        }
        System.out.println("\nI have stored it in array by using ASCII value to original content");
        for(int i=0;i<arr.length;i++)
        {
             ch=(char)arr[i];

            System.out.print(" "+ch);
        }
    }
}

2
Veuillez fournir une explication au lieu d'un simple vidage de code.
Jules Dupont

Bien que ce message contenant uniquement du code puisse répondre à la question, veuillez ajouter une explication de la raison pour laquelle il le fait. Cela aidera les futurs utilisateurs à évaluer la réponse à leur situation.
Tom Brunberg
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.