Converti int in char in java


124

Di seguito è riportato uno snippet di codice,

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

Ma quello che ottengo è un output vuoto.

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

Otterrò 1 come output.

Qualcuno può spiegarlo? E se voglio convertire un int in un char come nel primo snippet, cosa dovrei fare?


9
" Convertire un int in un carattere? " Forse b = (char)('0' + a)ma solo per 0 <= a <= 9.
johnchen902

6
Il valore decimale 01 è un carattere non stampabile; funziona correttamente.
apraetor

Risposte:


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

stamperà il carattere con il valore ASCII 1 (carattere di inizio intestazione, che non è stampabile).

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

stamperà il carattere con il valore ASCII 49 (uno corrispondente a '1')

Se vuoi convertire una cifra (0-9), puoi aggiungervi 48 e lanciare, o qualcosa di simile Character.forDigit(a, 10);.

Se vuoi convertire un intvalore come in ASCII, puoi usare Character.toChars(48)ad esempio.


2
System.out.println('b'+3);come posso ottenere b3invece 101con l'utilizzo di println? qualsiasi altro modo invece printf?
Asif Mushtaq

2
@UnKnown Devi renderlo una stringa invece di un char come segue System.out.println ("b" + 3);
Haggra

Character.toCharsopera su punti di codice Unicode, non su valori ASCII. Ottieni lo stesso (solo per BMP) se lanci int a char.
weaknespase

55

La mia risposta è simile alla risposta di jh314 ma spiegherò un po 'più a fondo.

Quello che dovresti fare in questo caso è:

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

Qui, abbiamo usato "0" perché i caratteri sono effettivamente rappresentati da valori ASCII. '0' è un carattere e rappresentato dal valore di 48.

Abbiamo digitato (a + '0')e per sommarli, Java ha convertito "0" nel suo valore ASCII che è 48 e a è 1, quindi la somma è 49. Quindi quello che abbiamo fatto è:

(char)(49)

Ci siamo rivolti inta char. L'equivalente ASCII di 49 è "1". Puoi convertire qualsiasi cifra in caratteri in questo modo ed è un modo più intelligente e migliore rispetto all'utilizzo del .toString()metodo e poi sottraendo la cifra per .charAt()metodo.


42

Sembra che tu stia cercando il Character.forDigitmetodo:

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

C'è anche un metodo che può convertire da un char a un int:

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

Nota che cambiando il RADIXpuoi anche supportare l'esadecimale (radice 16) e qualsiasi radice fino a 36 (o Character.MAX_RADIXcome è anche noto come).


@ProgrammingNub Definisce "il valore di int". .Non vuoi che stampi la cifra 4? O vuoi stampare il valore Ascii di int, in modo che 65venga stampato A? Perché la mia risposta qui stampa il comportamento previsto per i requisiti di questa domanda. Vedi ideone.com/09LAFR
Simon Forsberg

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

ciao, beh, ho affrontato lo stesso problema ma quello che ho fatto è stato il seguente codice.

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

Con questo ottieni il valore decimale come un tipo di carattere. Ho usato charAt () con indice 0 perché l'unico valore in quella stringa è "a" e, come saprai, la posizione di "a" in quella stringa inizia da 0.

Scusa se il mio inglese non è ben spiegato, spero che ti aiuti.


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

In ASCII, ogni carattere ha il proprio numero. E il carattere "0" è 48 per decimale, "1" è 49 e così via. Quindi se

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

1

Nessuno ha risposto alla vera "domanda" qui: stai convertendo int in char correttamente; nella tabella ASCII un valore decimale 01 è "inizio intestazione", un carattere non stampabile. Prova a cercare una tabella ASCII e a convertire un valore int compreso tra 33 e 7E; che ti darà caratteri da guardare.


1

Ogni volta che digiti cast integer in char, restituirà il valore ascii di quell'int (una volta passare attraverso la tabella ascii per una migliore comprensione)

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

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

    //output- D

2
Una sorta di .... charè un'unità di codice UTF-16. 68 come unità di codice UTF-16 è l'unica unità di codice necessaria per rappresentare il punto di codice Unicode U + 0044 . System.out cambierà la codifica del testo nella codifica predefinita (presumibilmente corrispondente al terminale / console in cui è in esecuzione il programma). println prende un carattere e tenta di codificarlo. Poiché il carattere è un punto di codice completo, può provare. Poiché U + 0044 è un carattere in quasi tutti i set di caratteri, dovrebbe essere riuscito a portarlo al terminale senza problemi. Niente a che vedere con ASCII.
Tom Blodget

0

In Java un char è un int. Il tuo primo frammento stampa il carattere corrispondente al valore 1 nello schema di codifica dei caratteri predefinito (che probabilmente è Unicode). Il carattere Unicode U + 0001 è un carattere non stampabile, motivo per cui non viene visualizzato alcun output.

Se desideri stampare il carattere "1", puoi cercare il valore "1" nello schema di codifica che stai utilizzando. In Unicode questo è 49 (lo stesso di ASCII). Ma questo funzionerà solo per le cifre 0-9.

Potrebbe essere meglio usare una stringa piuttosto che un carattere e utilizzare il toString()metodo integrato di Java :

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

Funzionerà qualunque sia la codifica del sistema e funzionerà per i numeri a più cifre.


1
Spiacente, ma un char non è un int, perché è composto da un diverso numero di byte (rappresentazione rapida di riferimento char-int - stackoverflow ). Un carattere può essere rappresentato da un numero, hai ragione, ma non è un numero intero.
spugnole

Inoltre, penso che potresti trovare la seconda riga dovrebbe leggere "String b = Integer.toString (a);"
Difettoso

Il tipo di dati char è ben definito in java.lang.Character così come la sua relazione con i punti di codice int e unicode e le unità di codice.
Ian

0

se vuoi stampare caratteri ascii in base al loro codice ascii e non vuoi andare oltre (come i caratteri unicode), puoi definire la tua variabile come un byte, e quindi usare il (char) convert. vale a dire:

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

A proposito, il codice ASCII per la lettera "A" è 65


0

Assicurati che il valore intero sia il valore ASCII di un alfabeto / carattere.

In caso contrario, fallo.

for e.g. if int i=1

quindi aggiungere 64 in modo che diventi 65 = valore ASCII di 'A' Quindi utilizzare

char x = (char)i;

print x

// 'A' will be printed 

0

Se stiamo parlando di tipi di classe, non primitivi, è necessario eseguire il seguente trucco:

Integer someInt;
Character someChar;

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

Non è necessario renderlo una stringa nel processo e hai un numero di parentesi non corrispondente.
Simon Forsberg

Simon, "parentesi". Consigliare come allora?
matua

-1

guarda il seguente programma per il concetto di conversione completo

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

spero, aiuterà almeno qualcosa


-2

Se vuoi convertire un carattere nel suo intero corrispondente, puoi fare qualcosa del genere:

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

Questo accade perché in ASCII ci sono alcuni elementi che non possono essere stampati normalmente.

Ad esempio, i numeri da 97 a 122 sono numeri interi corrispondenti alle lettere minuscole dalla a alla 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
Fornisci una spiegazione invece di un semplice dump del codice.
Jules Dupont

Anche se questo post di solo codice potrebbe rispondere alla domanda, aggiungi una spiegazione del motivo. Ciò aiuterà i futuri utenti a valutare la risposta per la loro situazione.
Tom Brunberg
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.