Ubah int menjadi char di java

124

Di bawah ini adalah potongan kode,

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

Tapi yang saya dapatkan adalah keluaran kosong.

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

Saya akan mendapatkan 1 sebagai output saya.

Adakah yang bisa menjelaskan ini? Dan jika saya ingin mengubah int menjadi char seperti pada cuplikan pertama, apa yang harus saya lakukan?

pengguna2640480
sumber
9
" Mengubah int menjadi karakter? " Mungkin b = (char)('0' + a)tetapi hanya untuk 0 <= a <= 9.
johnchen902
6
Nilai desimal 01 adalah karakter non-cetak; itu bekerja dengan baik.
apraetor

Jawaban:

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

akan mencetak karakter dengan nilai ascii 1 (karakter start-of-heading, yang tidak dapat dicetak).

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

akan mencetak karakter dengan nilai ascii 49 (yang sesuai dengan '1')

Jika Anda ingin mengonversi digit (0-9), Anda dapat menambahkan 48 ke digit tersebut dan mentransmisikan, atau semacamnya Character.forDigit(a, 10);.

Jika Anda ingin mengonversi intsebagai nilai ascii, Anda dapat menggunakan Character.toChars(48)misalnya.

jh314.dll
sumber
2
System.out.println('b'+3);bagaimana saya bisa mendapatkan b3alih 101- alih menggunakan println? ada cara lain selain printf?
Asif Mushtaq
2
@UnKnown Anda perlu membuatnya sebagai string, bukan char sebagai berikut System.out.println ("b" + 3);
Haggra
Character.toCharsberoperasi pada poin kode Unicode, bukan nilai ASCII. Anda mendapatkan yang sama (hanya untuk BMP) jika Anda hanya memasukkan int ke char.
weaknespase
55

Jawaban saya mirip dengan jawaban jh314 tetapi saya akan menjelaskan sedikit lebih dalam.

Apa yang harus Anda lakukan dalam kasus ini adalah:

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

Di sini, kami menggunakan '0' karena karakter sebenarnya diwakili oleh nilai ASCII. '0' adalah karakter dan diwakili oleh nilai 48.

Kami mengetik (a + '0')dan untuk menjumlahkannya, Java mengubah '0' menjadi nilai ASCII-nya yaitu 48 dan a adalah 1 sehingga jumlahnya adalah 49. Lalu yang kami lakukan adalah:

(char)(49)

Kami dicor intke char. ASCII yang setara dengan 49 adalah '1'. Anda dapat mengonversi digit apapun menjadi char dengan cara ini dan lebih cerdas dan lebih baik daripada menggunakan .toString()metode dan kemudian mengurangkan digit dengan .charAt()metode.

Haggra
sumber
42

Sepertinya Anda sedang mencari Character.forDigitmetode:

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

Ada juga metode yang dapat mengubah dari char kembali menjadi int:

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

Perhatikan bahwa dengan mengubah RADIXAnda juga dapat mendukung heksadesimal (radix 16) dan radix apapun hingga 36 (atau Character.MAX_RADIXyang juga dikenal sebagai).

Simon Forsberg
sumber
@ProgrammingNub Definisikan "nilai int". Apakah Anda tidak ingin mencetak angka 4? Atau Anda ingin mencetak nilai Ascii dari int, sehingga 65mencetak A? Karena jawaban saya di sini mencetak perilaku yang diharapkan untuk persyaratan pertanyaan ini. Lihat ideone.com/09LAFR
Simon Forsberg
10
int a = 1;
char b = (char) a;
System.out.println(b);

hola, baik saya mengalami masalah yang sama tetapi yang saya lakukan adalah kode berikut.

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

Dengan ini Anda mendapatkan nilai desimal sebagai tipe karakter. Saya menggunakan charAt () dengan indeks 0 karena satu-satunya nilai ke dalam String itu adalah 'a' dan seperti yang Anda ketahui, posisi 'a' ke dalam String itu dimulai dari 0.

Maaf jika bahasa Inggris saya tidak dijelaskan dengan baik, semoga dapat membantu Anda.

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

Di ASCII, setiap karakter memiliki nomornya sendiri. Dan karakter '0' adalah 48 untuk desimal, '1' adalah 49, dan seterusnya. Jadi jika

char b = '2';
int a = b = 50;
babi besar
sumber
1

Tidak ada yang menjawab "pertanyaan" sebenarnya di sini: Anda ARE mengonversi int ke char dengan benar; dalam tabel ASCII nilai desimal 01 adalah "start of heading", karakter non-cetak. Coba cari tabel ASCII dan ubah nilai int antara 33 dan 7E; yang akan memberi Anda karakter untuk dilihat.

apraetor
sumber
1

Setiap kali Anda mengetik cast integer ke char, itu akan mengembalikan nilai ascii dari int itu (sekali pergi melalui tabel ascii untuk pemahaman yang lebih baik)

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

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

    //output- D
ajay verma
sumber
2
Semacam .... charadalah unit kode UTF-16. 68 sebagai unit kode UTF-16 adalah satu-satunya unit kode yang diperlukan untuk mewakili titik kode Unicode U + 0044 . System.out akan mengubah pengkodean teks menjadi pengkodean default (mungkin cocok dengan terminal / konsol tempat program berjalan). println mengambil karakter dan mencoba menyandikannya. Karena char adalah titik kode yang lengkap, itu dapat dicoba. Karena U + 0044 adalah karakter di hampir semua himpunan karakter, seharusnya ada keberhasilan dalam memasukkannya ke terminal tanpa karakter. Tidak ada hubungannya dengan ASCII.
Tom Blodget
0

Di java a char adalah int. Cuplikan pertama Anda mencetak karakter yang sesuai dengan nilai 1 dalam skema pengkodean karakter default (yang mungkin Unicode). Karakter Unicode U + 0001 adalah karakter non-cetak, itulah sebabnya Anda tidak melihat keluaran apa pun.

Jika Anda ingin mencetak karakter '1', Anda dapat mencari nilai '1' dalam skema pengkodean yang Anda gunakan. Di Unicode nilainya 49 (sama dengan ASCII). Tetapi ini hanya akan berfungsi untuk angka 0-9.

Anda mungkin lebih baik menggunakan String daripada char, dan menggunakan toString()metode bawaan Java :

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

Ini akan berfungsi apa pun pengkodean sistem Anda, dan akan berfungsi untuk angka multi-digit.

david25272
sumber
1
Maaf, tapi char bukanlah int, karena dibuat dari jumlah byte yang berbeda (ref cepat representasi char-int - stackoverflow ). Karakter A dapat diwakili oleh angka, Anda benar, tetapi itu bukan bilangan bulat.
morels
Juga, saya pikir Anda mungkin menemukan baris kedua harus membaca "String b = Integer.toString (a);"
Rusak
Tipe data char didefinisikan dengan baik di java.lang.Character serta hubungannya dengan titik kode int dan unicode serta unit kode.
Ian
0

jika Anda ingin mencetak karakter ascii berdasarkan kode ascii mereka dan tidak ingin melampaui itu (seperti karakter unicode), Anda dapat mendefinisikan variabel Anda sebagai byte, dan kemudian menggunakan konversi (char). yaitu:

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

BTW, kode ascii untuk huruf 'A' adalah 65

MohS
sumber
0

Pastikan nilai integer adalah nilai ASCII dari alfabet / karakter.

Jika tidak maka buatlah.

for e.g. if int i=1

lalu tambahkan 64 sehingga menjadi 65 = nilai ASCII dari 'A' Lalu gunakan

char x = (char)i;

print x

// 'A' will be printed 
Mayur Gudi
sumber
0

Jika kita berbicara tentang tipe kelas - bukan primitif, trik berikut harus dilakukan:

Integer someInt;
Character someChar;

someChar = (char)Integer.parseInt(String.valueOf(someInt));
matua
sumber
Tidak perlu menjadikannya String dalam prosesnya, dan Anda memiliki jumlah paranthesis yang tidak cocok.
Simon Forsberg
Simon, "tanda kurung". Menyarankan bagaimana kemudian?
matua
-1

lihat program berikut untuk konsep konversi lengkap

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

berharap, ini akan membantu setidaknya sesuatu

Shivam Rai
sumber
-2

Jika Anda ingin mengonversi karakter menjadi bilangan bulat yang sesuai, Anda dapat melakukan sesuatu seperti ini:

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

Hal ini terjadi karena di ASCII terdapat beberapa item yang tidak dapat dicetak secara normal.

Misalnya, angka 97 sampai 122 adalah bilangan bulat yang sesuai dengan huruf kecil a sampai z.

Raul Londoño Murillo
sumber
-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);
        }
    }
}
Akash Dhotre
sumber
2
Berikan penjelasan, bukan hanya dump kode.
Jules Dupont
Meskipun postingan khusus kode ini mungkin menjawab pertanyaan tersebut, harap tambahkan penjelasan mengapa demikian. Ini akan membantu pengguna di masa mendatang mengevaluasi jawaban untuk situasi mereka.
Tom Brunberg