Ini mungkin telah dijawab di tempat lain tetapi bagaimana Anda mendapatkan nilai karakter dari nilai int?
Secara khusus saya membaca dari aliran tcp dan metode reader .read () mengembalikan sebuah int.
Bagaimana cara mendapatkan char dari ini?
Ini mungkin telah dijawab di tempat lain tetapi bagaimana Anda mendapatkan nilai karakter dari nilai int?
Secara khusus saya membaca dari aliran tcp dan metode reader .read () mengembalikan sebuah int.
Bagaimana cara mendapatkan char dari ini?
Jawaban:
Jika Anda mencoba mengubah aliran menjadi teks, Anda perlu mengetahui pengkodean mana yang ingin Anda gunakan. Anda kemudian dapat meneruskan larik byte ke dalam Stringkonstruktor dan menyediakan Charset, atau menggunakan InputStreamReaderyang sesuai Charsetsebagai gantinya.
Transmisi dari intke charhanya berfungsi jika Anda menginginkan ISO-8859-1, jika Anda membaca byte dari aliran secara langsung.
EDIT: Jika Anda sedang sudah menggunakan Reader, maka pengecoran nilai kembali dari read()ke charadalah cara yang tepat untuk pergi (setelah memeriksa apakah itu -1 atau tidak) ... tapi itu biasanya lebih efisien dan nyaman untuk menelepon read(char[], int, int)untuk membaca seluruh blok teks pada satu waktu. Jangan lupa untuk memeriksa nilai kembali, untuk melihat berapa banyak karakter yang telah dibaca.
InputStreamReaderdalam a BufferedReader, seperti yang disebutkan di javadoc docs.oracle.com/javase/8/docs/api/java/io/…
Mungkin Anda bertanya untuk:
Character.toChars(65) // returns ['A']
Info lebih lanjut: Character.toChars(int codePoint)
Mengonversi karakter yang ditentukan (titik kode Unicode) ke representasi UTF-16 yang disimpan dalam larik karakter. Jika titik kode yang ditentukan adalah nilai BMP (Basic Multilingual Plane atau Plane 0), array karakter yang dihasilkan memiliki nilai yang sama dengan codePoint. Jika titik kode yang ditentukan adalah titik kode tambahan, larik karakter yang dihasilkan memiliki pasangan pengganti yang sesuai.
toCharsbiasanya tidak pantas. Jika dia membaca dari Reader, maka tidak masalah.
Itu tergantung pada apa yang Anda maksud dengan "convert an int to char".
Jika Anda hanya ingin memasukkan nilai ke dalam int, Anda dapat mentransmisikannya menggunakan notasi typecast Java:
int i = 97; // 97 is 'a' in ASCII
char c = (char) i; // c is now 'a'
Jika Anda bermaksud mengubah integer 1 menjadi karakter '1', Anda dapat melakukannya seperti ini:
if (i >= 0 && i <= 9) {
char c = Character.forDigit(i, 10);
....
}
Jika Anda ingin mengubah int 5 menjadi char '5': (Hanya untuk integer 0 - 9)
int i = 5;
char c = (char) ('0' + i); // c is now '5';
Casting sederhana:
int a = 99;
char c = (char) a;
Apakah ada alasan mengapa ini tidak berhasil untuk Anda?
Sebagian besar jawaban di sini mengusulkan jalan pintas, yang dapat membawa Anda ke dalam masalah besar jika Anda tidak tahu apa yang Anda lakukan. Jika Anda ingin mengambil jalan pintas, maka Anda harus tahu persis apa pengkodean data Anda.
Setiap kali java berbicara tentang karakter dalam dokumentasinya, ia berbicara tentang karakter 16-bit.
Anda dapat menggunakan DataInputStream, yang memiliki metode yang nyaman. Untuk efisiensi, bungkus dengan a BufferedReader.
// e.g. for sockets
DataInputStream in = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
char character = readChar(); // no need to cast
Masalahnya adalah bahwa masing-masing readChar()akan benar-benar melakukan 2 readdan menggabungkannya menjadi satu karakter 16-bit.
US-ASCII menyimpan 8 bit untuk menyandikan 1 karakter. Tabel ASCII hanya menjelaskan 128 kemungkinan karakter, jadi 1 bit selalu tidak digunakan.
Anda cukup melakukan pemeran dalam kasus ini.
int input = stream.read();
if (input < 0) throw new EOFException();
char character = (char) input;
UTF-8, Latin-1, ANSI, dan banyak pengkodean lainnya menggunakan semua 8-bit. 7-bit pertama mengikuti tabel ASCII dan identik dengan salah satu pengkodean US-ASCII. Namun, bit ke-8 menawarkan karakter yang berbeda dalam semua pengkodean ini. Jadi, di sini hal-hal menjadi menarik.
Jika Anda seorang koboi, dan Anda berpikir bahwa bit ke-8 tidak penting (yaitu Anda tidak peduli dengan karakter seperti "à, é, ç, è, ô ...) maka Anda dapat lolos dengan pemeran sederhana.
Namun, jika Anda ingin melakukan ini secara profesional, Anda harus SELALU menentukan rangkaian karakter setiap kali Anda mengimpor / mengekspor teks (mis. Soket, file ...).
Mari serius. Semua opsi di atas adalah trik murah. Jika Anda ingin membuat perangkat lunak yang fleksibel, Anda perlu mendukung rangkaian karakter yang dapat dikonfigurasi untuk mengimpor / mengekspor data Anda. Berikut solusi umum:
Membaca data Anda menggunakan byte[]buffer dan mengubahnya menjadi String menggunakan parameter charset .
byte[] buffer = new byte[1024];
int nrOfBytes = stream.read(buffer);
String result = new String(buffer, nrOfBytes, charset);
Anda juga bisa menggunakan InputStreamReaderyang bisa dipakai dengan parameter charset.
Hanya satu aturan emas lagi: jangan pernah secara langsung mentransmisikan satu byte ke karakter. Itu selalu salah.
Mendasarkan jawaban saya pada asumsi bahwa pengguna hanya ingin literaaly mengkonversi intke char, misalnya
Input:
int i = 5;
Output:
char c = '5'
Ini telah dijawab di atas, namun jika nilai integer i > 10, maka perlu digunakan char array.
char[] c = String.valueOf(i).toCharArray();
int i = 7;
char number = Integer.toString(i).charAt(0);
System.out.println(number);
mungkin bukan yang tercepat:
//for example there is an integer with the value of 5:
int i = 5;
//getting the char '5' out of it:
char c = String.format("%s",i).charAt(0);
Jawaban untuk konversi char menjadi int atau long adalah casting sederhana.
Misalnya: - jika Anda ingin mengubah Char '0' menjadi panjang.
Ikuti pemeran sederhana
Char ch='0';
String convertedChar= Character.toString(ch); //Convert Char to String.
Long finalLongValue=Long.parseLong(convertedChar);
Selesai !!
public int read(char[] cbuf)akan menyelesaikan masalah?