2011-10-08 35 views
93

Tôi có int int trong khoảng 0-255 và tôi muốn tạo một String (có độ dài 1) sao cho giá trị ASCII của ký tự đơn này là số nguyên được chỉ định.Làm thế nào để chuyển đổi mã ASCII (0-255) thành một chuỗi ký tự liên quan?

Có cách nào đơn giản để thực hiện việc này trong Java không?

dụ:

65 -> "A" 
102 -> "f" 
+3

đây không phải là bản sao như đã đề cập ở trên. Đây không phải là chuyển đổi từ số nguyên nhưng từ char (ascii) –

+10

* Không * một bản sao của "Làm thế nào để chuyển đổi từ int thành String?" ... anyway, FWIW, ASCII chỉ là 7-bit với các giá trị [0, 127]; -) –

+0

@phooji Tôi nghĩ rằng bài viết sais làm thế nào để chuyển đổi 1 -> "1" vv ' – Belgi

Trả lời

181
+0

Đối với các nền tảng dựa trên MIDP 2/CLDC 1.1 (không có 'Character.toString (char)', http://stackoverflow.com/a/6210938/923560 cung cấp các giải pháp bổ sung – Abdull

+0

Lý do cho '(char) 'chỉ định Nói cách khác, tại sao tôi không thể đặt' Character.toString (i); '(Java noob) –

+0

vì' Character.toString' không chấp nhận ints – behelit

24

String.valueOf(Character.toChars(int))

Giả sử các số nguyên là, như bạn nói, từ 0 đến 255, bạn sẽ nhận được một mảng với một ký tự đơn từ Character.toChars, sẽ trở thành một chuỗi ký tự đơn khi được chuyển đến String.valueOf.

Sử dụng Character.toChars là thích hợp hơn với các phương pháp liên quan đến một dàn diễn viên từ int để char (tức (char) i) đối với một số lý do, trong đó có Character.toChars sẽ ném một IllegalArgumentException nếu bạn thất bại trong việc xác nhận đúng số nguyên trong khi các diễn viên sẽ nuốt lỗi (theo số narrowing primitive conversions specification), có khả năng cung cấp đầu ra khác với những gì bạn dự định.

+0

Giả sử rằng số nguyên là trong khoảng 0 đến 255 (như bạn nói rằng bạn làm ... và như câu hỏi chỉ định), nó là không cần thiết và tối ưu để sử dụng 'toChars'. –

+5

Bạn hoàn toàn chính xác rằng một cái gì đó như 'Character.toString ((char) i)' là nhanh hơn 'String.valueOf (Character.toChars (i))'. Chạy điểm chuẩn nhanh chóng chuyển đổi 1.000.000 số nguyên ngẫu nhiên trong phạm vi nhất định (100 lần, an toàn) trên máy tính của tôi cho thời gian trung bình là 153,07 nano giây so với 862,39 nano giây. Tuy nhiên, trong bất kỳ ứng dụng thú vị nào, sẽ có nhiều thứ quan trọng hơn để tối ưu hóa. Giá trị gia tăng của việc xử lý an toàn, xác định và dễ dàng mở rộng ra ngoài phạm vi [0,255] nếu nó được yêu cầu lớn hơn hiệu suất nhỏ. – zjs

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

Bạn sẽ kết thúc bằng một chuỗi có độ dài một, ký tự đơn có mã (ASCII) 65. Trong ký tự Java là các kiểu dữ liệu số.

42

System.out.println((char)65); sẽ in "A"

+0

Mẹo REPL: Nếu bạn tình cờ sử dụng JShell (Java 9), bạn có thể bỏ qua System.out. Chỉ cần gõ '(char) 65' để tìm ra ký tự. – DavidS

1

Người ta có thể lặp từ a đến z như thế này

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

Một cách dễ dàng hơn làm giống nhau:

Loại cast số nguyên nhân vật, chúng ta hãy int n là số nguyên, sau đó:

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

nó là một giải pháp đơn giản

-1

Đây là một ví dụ, trong đó cho thấy rằng bằng cách chuyển đổi một int để char, người ta có thể xác định nhân vật tương ứng với một mã ASCII.

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

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

câu trả lời trên chỉ gần giải quyết vấn đề. heres câu trả lời của bạn:

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

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

Giải thích câu trả lời của bạn – want2learn

Các vấn đề liên quan