166 votes

Convertir un int en char en java

Vous trouverez ci-dessous un extrait de code,

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

Mais ce que j'obtiens est une sortie vide.

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

Je vais obtenir 1 comme résultat.

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

0voto

david25272 Points 274

En java, un char es un int. Votre premier extrait imprime le caractère correspondant à la valeur 1 dans le schéma de codage des 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 pas de sortie.

Si vous voulez imprimer le caractère '1', vous pouvez rechercher la valeur de '1' dans le schéma d'encodage que vous utilisez. Dans Unicode, cette valeur est 49 (comme dans ASCII). Mais cela ne fonctionne que pour les chiffres de 0 à 9.

Il est préférable d'utiliser une chaîne de caractères plutôt qu'un caractère, et d'utiliser la fonction intégrée de Java. toString() méthode :

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

Cela fonctionnera quel que soit l'encodage de votre système, et fonctionnera pour les nombres à plusieurs chiffres.

0voto

MohS Points 1

Si vous voulez imprimer des caractères ascii basés sur 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, et ensuite utiliser le convertisseur (char). i.e. :

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.

0voto

Mayur Gudi Points 15

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

Si ce n'est pas le cas, faites-le.

for e.g. if int i=1

puis ajoutez 64 pour qu'il devienne 65 = valeur ASCII de 'A'. Utilisez ensuite

char x = (char)i;

print x

// 'A' will be printed

0voto

Ibad Points 11

Il y a une méthode par laquelle int peut être converti en char et même sans utiliser les valeurs ASCII.

Ejemplo:

int i = 2;
char ch = Integer.toString(i).charAt(0);
System.out.println(ch);

Explication :

Tout d'abord, le nombre entier est converti en chaîne de caractères, puis en utilisant la fonction String. charAt() le caractère est extrait de la chaîne. Comme le nombre entier ne comporte qu'un seul chiffre, l'indice 0 est donné à charAt() función.

0voto

Rajat Agrawal Points 51

Ma solution consiste à convertir les alphabets minuscules (a-z) en (0-25) et vice versa.

Ma réponse est pour un cas d'utilisation spécifique, ce n'est pas une solution générique. Ma solution vous aidera si vous voulez stocker la fréquence d'un caractère dans un tableau d'entiers de taille 26 au lieu d'utiliser Hashmap<Character,Integer>.

----> pour la conversion de 0 à 25 en a-z

char ch=(char)(0+'a') ; // sortie 'a' // entrée 0 (en tant que nombre entier)

char ch=(char)(25+'a') ; // sortie 'z' // entrée 25(en tant que nombre entier)

---->pour convertir de a à z en 0-25

int freq='a'-'a' // sortie 0 // entrée 'a

int freq='b'-'a' // Sortie 1 // Entrée 'b'.

int freq='c'-'a' // Sortie 2 // Entrée 'c'.

int freq='z'-'a' // Sortie 25 // Entrée 'z'.

Encore une fois, cette approche vous aidera à obtenir la fréquence des caractères ainsi que les caractères.

public class Main
{
    public static void main(String[] args) {
        String s="rajatfddfdf";
        int freq[]= new int[26];
        for(int i=0;i<s.length();i++){
            char characterAtIndex=s.charAt(i);
            freq[characterAtIndex-'a']+=1;
        }
        for(int i=0;i<26;i++){
            System.out.println((char)('a'+i)+" frequency="+freq[i]);
        }
    }
}

En utilisant le code ci-dessus, nous pouvons obtenir la fréquence ainsi que le caractère en utilisant un tableau d'entiers de taille 26. Nous pouvons écrire la logique if-else si vous ne voulez pas inclure le caractère avec la fréquence 0.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X