Điều này có thể đã được trả lời khác, nhưng làm thế nào để bạn lấy giá trị ký tự của một giá trị int?
Cụ thể là tôi đang đọc một luồng tcp và phương thức .read () của reader trả về một int.
Làm thế nào để tôi có được một char từ cái này?
Điều này có thể đã được trả lời khác, nhưng làm thế nào để bạn lấy giá trị ký tự của một giá trị int?
Cụ thể là tôi đang đọc một luồng tcp và phương thức .read () của reader trả về một int.
Làm thế nào để tôi có được một char từ cái này?
Câu trả lời:
Nếu bạn đang cố gắng chuyển một luồng thành văn bản, bạn cần biết bạn muốn sử dụng bảng mã nào. Sau đó, bạn có thể truyền một mảng byte vào hàm Stringtạo và cung cấp một Charsethoặc sử dụng InputStreamReadervới hàm thích hợp Charsetđể thay thế.
Chỉ cần truyền từ intsang charchỉ hoạt động nếu bạn muốn ISO-8859-1, nếu bạn đang đọc byte từ một luồng trực tiếp.
CHỈNH SỬA: Nếu bạn đang sử dụng a Reader, thì việc truyền giá trị trả về của read()thành charlà cách thích hợp để thực hiện (sau khi kiểm tra xem nó có phải là -1 hay không) ... nhưng thông thường sẽ hiệu quả hơn và thuận tiện hơn khi gọi read(char[], int, int)để đọc toàn bộ khối văn bản tại một thời điểm. Đừng quên kiểm tra giá trị trả về để xem có bao nhiêu ký tự đã được đọc.
InputStreamReadermột BufferedReader, như đã đề cập trong javadoc docs.oracle.com/javase/8/docs/api/java/io/…
Có thể bạn đang yêu cầu:
Character.toChars(65) // returns ['A']
Thêm thông tin: Character.toChars(int codePoint)
Chuyển đổi ký tự được chỉ định (điểm mã Unicode) thành biểu diễn UTF-16 của nó được lưu trữ trong một mảng char. Nếu điểm mã được chỉ định là giá trị BMP (Mặt phẳng đa ngôn ngữ cơ bản hoặc Mặt phẳng 0), mảng char kết quả có cùng giá trị với codePoint. Nếu điểm mã được chỉ định là điểm mã bổ sung, mảng char kết quả có cặp thay thế tương ứng.
toCharsthường không phù hợp. Nếu anh ấy đang đọc từ một Reader, thì không sao cả.
Nó phụ thuộc vào những gì bạn có nghĩa là "chuyển đổi một int thành char".
Nếu bạn chỉ muốn truyền giá trị trong int, bạn có thể ép kiểu nó bằng cách sử dụng ký hiệu typecast của Java:
int i = 97; // 97 is 'a' in ASCII
char c = (char) i; // c is now 'a'
Nếu bạn muốn chuyển đổi số nguyên 1 thành ký tự '1', bạn có thể làm như sau:
if (i >= 0 && i <= 9) {
char c = Character.forDigit(i, 10);
....
}
Nếu bạn chỉ muốn chuyển đổi int 5 thành char '5': (Chỉ dành cho số nguyên 0-9)
int i = 5;
char c = (char) ('0' + i); // c is now '5';
Đúc đơn giản:
int a = 99;
char c = (char) a;
Có lý do gì mà điều này không hiệu quả với bạn?
Hầu hết các câu trả lời ở đây đề xuất các phím tắt, có thể mang lại cho bạn những vấn đề lớn nếu bạn không biết mình đang làm gì. Nếu bạn muốn sử dụng các phím tắt, thì bạn phải biết chính xác mã hóa dữ liệu của mình.
Bất cứ khi nào java nói về các ký tự trong tài liệu của nó, nó sẽ nói về các ký tự 16 bit.
Bạn có thể sử dụng a DataInputStream, có các phương pháp thuận tiện. Để có hiệu quả, hãy bọc nó trong a BufferedReader.
// e.g. for sockets
DataInputStream in = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
char character = readChar(); // no need to cast
Vấn đề là mỗi thứ readChar()sẽ thực hiện 2 read'và kết hợp chúng thành một ký tự 16 bit.
US-ASCII dự trữ 8 bit để mã hóa 1 ký tự. Mặc dù vậy, bảng ASCII chỉ mô tả 128 ký tự có thể có, vì vậy 1 bit luôn không được sử dụng.
Bạn chỉ có thể thực hiện cast trong trường hợp này.
int input = stream.read();
if (input < 0) throw new EOFException();
char character = (char) input;
UTF-8, Latin-1, ANSI và nhiều bảng mã khác sử dụng tất cả 8-bit. 7 bit đầu tiên tuân theo bảng ASCII và giống với các bit của bảng mã US-ASCII. Tuy nhiên, bit thứ 8 cung cấp các ký tự khác nhau trong tất cả các bảng mã này. Vì vậy, ở đây mọi thứ trở nên thú vị.
Nếu bạn là một cao bồi, và bạn nghĩ rằng bit thứ 8 không quan trọng (tức là bạn không quan tâm đến các ký tự như "à, é, ç, è, ô ...) thì bạn có thể bỏ qua một cách đơn giản.
Tuy nhiên, nếu bạn muốn làm điều này một cách chuyên nghiệp, bạn thực sự LUÔN LUÔN chỉ định một bộ ký tự bất cứ khi nào bạn nhập / xuất văn bản (ví dụ: ổ cắm, tệp ...).
Hãy nghiêm túc đi. Tất cả các tùy chọn trên là thủ thuật rẻ tiền. Nếu bạn muốn viết phần mềm linh hoạt, bạn cần hỗ trợ một bộ ký tự có thể định cấu hình để nhập / xuất dữ liệu của bạn. Đây là một giải pháp chung:
Đọc dữ liệu của bạn bằng cách sử dụng byte[]bộ đệm và để chuyển đổi dữ liệu đó thành một String tham số bộ ký tự .
byte[] buffer = new byte[1024];
int nrOfBytes = stream.read(buffer);
String result = new String(buffer, nrOfBytes, charset);
Bạn cũng có thể sử dụng một InputStreamReadercó thể được khởi tạo bằng tham số bộ ký tự.
Chỉ một quy tắc vàng nữa: không bao giờ truyền trực tiếp một byte đến một ký tự. Đó luôn là một sai lầm.
Dựa trên câu trả lời của tôi dựa trên giả định rằng người dùng chỉ muốn chuyển đổi văn bản intsang char, chẳng hạn
Input:
int i = 5;
Output:
char c = '5'
Điều này đã được trả lời ở trên, tuy nhiên nếu giá trị nguyên i > 10thì cần phải sử dụng char array.
char[] c = String.valueOf(i).toCharArray();
int i = 7;
char number = Integer.toString(i).charAt(0);
System.out.println(number);
có thể không phải là nhanh nhất:
//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);
Câu trả lời cho việc chuyển đổi char thành int hoặc long là đúc đơn giản.
Ví dụ: - nếu bạn muốn chuyển Char '0' thành long.
Theo dõi diễn viên đơn giản
Char ch='0';
String convertedChar= Character.toString(ch); //Convert Char to String.
Long finalLongValue=Long.parseLong(convertedChar);
Làm xong!!
public int read(char[] cbuf)sẽ giải quyết được vấn đề?