Bagaimana cara mengubah kode ASCII (0-255) menjadi karakter yang sesuai?


136

Bagaimana saya bisa mengubah, di Jawa, kode ASCII (yang merupakan integer dari kisaran [0, 255]) ke karakter ASCII yang sesuai?

Sebagai contoh:

65  -> "A"
102 -> "f"

3
ini bukan duplikat seperti yang disebutkan di atas. Ini bukan konversi dari integer tetapi dari char (ascii)
Chathuranga Chandrasekara

11
Bukan duplikat dari "Bagaimana mengkonversi dari int ke String?" ... bagaimanapun, FWIW, ASCII hanya 7-bit dengan nilai [0, 127] ;-)

1
@phooji Saya pikir posting itu adalah cara mengonversi 1 -> "1" dll '
Belgi

1
@pst - diperpanjang ASII ;-)
Belgi

3
@ Belgi - Anda harus menyatakan pengkodean secara eksplisit jika Anda ingin mentranskode nilai 128-255 dengan benar. Istilah "ASCII diperpanjang" tidak berarti.
McDowell

Jawaban:


247

Untuk platform berbasis MIDP 2 / CLDC 1.1 (yang tidak ada Character.toString(char), stackoverflow.com/a/6210938/923560 menyediakan solusi tambahan.
Abdull

Apa alasan (char)penunjukannya? Dengan kata lain, mengapa saya tidak bisa mengatakannya begitu saja Character.toString(i);? (Java noob)
Adam Hughes

1
Perhatikan bahwa ini tidak akan berfungsi untuk Integerjenisnya, Anda akan mendapatkan kesalahan "java.lang.Integer tidak dapat dilemparkan ke java.lang.Character". Tambahkan pemeran ke yang intpertama, misalnya: Character.toString((char)(int)myInteger);
gbmhunter

1
The inilai (0-255) akan dari ISO-8859-1 set karakter. (Penanya menolak untuk mengidentifikasi "ASCII diperpanjang" [istilah samar] mana yang diinginkan, kecuali dengan menerima jawaban ini.)
Tom Blodget

60

System.out.println((char)65); akan mencetak "A"


2
REPL tip: Jika Anda kebetulan menggunakan JShell (Java 9) Anda dapat menghilangkan System.out. Cukup ketik (char) 65untuk mengetahui karakter apa itu.
DavidS

2
Pertanyaannya bukan tentang mencetak tetapi mengonversi.
iAmLearning

29

String.valueOf(Character.toChars(int))

Dengan asumsi bilangan bulat, seperti yang Anda katakan, antara 0 dan 255, Anda akan mendapatkan larik dengan satu karakter kembali dari Character.toChars, yang akan menjadi string karakter tunggal saat diteruskan ke String.valueOf.

Penggunaan Character.toCharslebih disukai daripada metode yang melibatkan cast from intto char(yaitu (char) i) karena sejumlah alasan, termasuk yang Character.toCharsakan menampilkan IllegalArgumentExceptionjika Anda gagal memvalidasi integer dengan benar sementara cast akan menelan error (sesuai spesifikasi konversi primitif yang mempersempit ), berpotensi memberikan keluaran selain dari yang Anda inginkan.


Dengan asumsi bahwa integer berada dalam kisaran 0 sampai 255 (seperti yang Anda nyatakan ... dan seperti yang ditentukan oleh pertanyaan), itu tidak perlu dan kurang optimal untuk digunakan toChars.
Stephen C

5
Anda sepenuhnya benar bahwa sesuatu seperti Character.toString((char) i)itu lebih cepat dari String.valueOf(Character.toChars(i)). Menjalankan tolok ukur cepat untuk mengubah 1.000.000 bilangan bulat acak dalam rentang yang diberikan (100 kali, agar aman) di mesin saya memberikan waktu rata-rata 153,07 nanodetik vs. 862,39 nanodetik. Namun, dalam aplikasi yang menarik, akan ada hal yang jauh lebih penting untuk dioptimalkan. Nilai tambah dari penanganan yang aman, deterministik, dan kemudahan memperluas di luar kisaran [0,255] jika diperlukan lebih besar daripada hit kinerja minor.
zjs

9
int number = 65;
char c = (char)number;

ini adalah solusi sederhana


4
    new String(new char[] { 65 })

Anda akan mendapatkan string dengan panjang satu, yang karakter tunggalnya memiliki kode (ASCII) 65. Dalam Java karakter adalah tipe data numerik.


1

Seseorang dapat beralih dari a ke z seperti ini

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

1

Cara yang lebih mudah untuk melakukan hal yang sama:

Ketik cast integer to character, misalkan int nintegernya, lalu:

Char c=(char)n;
System.out.print(c)//char c will store the converted value.

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

Tolong jelaskan jawaban Anda
want2learn

0

Mengapa tidak menyederhanakannya menjadi metode yang mengembalikan karakter ascii?

public char toAscii (int input) {
    return (char)input;
}

-1

Ini adalah contoh, yang menunjukkan bahwa dengan mengubah int menjadi char, seseorang dapat menentukan karakter terkait ke kode ASCII.

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

        for(int i =0; i<256; i++)
        {
            System.out.println( i + ". " + (char)i);
        }
    }
}

-1

jawaban atas hanya mendekati memecahkan Masalah. inilah jawaban Anda:

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.