Làm cách nào để chuyển đổi mã ASCII (0-255) thành ký tự tương ứng?


135

Làm cách nào tôi có thể chuyển đổi, trong Java, mã ASCII (là số nguyên từ phạm vi [0, 255]) sang ký tự ASCII tương ứng của nó?

Ví dụ:

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

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

11
Không phải là bản sao của "Cách chuyển đổi từ int sang String?" ... dù sao, FWIW, ASCII chỉ là 7 bit với các giá trị [0, 127] ;-)

1
@phooji Tôi nghĩ rằng bài đăng đó là cách chuyển đổi 1 -> "1", v.v.
Bỉi

1
@pst - nó được mở rộng ASII ;-)
Bỉ

3
@Belgi - bạn sẽ cần nêu rõ mã hóa của mình nếu bạn muốn chuyển mã chính xác các giá trị 128-255. Thuật ngữ "ASCII mở rộng" không có ý nghĩa.
McDowell

Câu trả lời:


244

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

Lý do của sự (char)chỉ định là gì? Nói cách khác, tại sao tôi không thể đặt Character.toString(i);? (Java noob)
Adam Hughes

1
Lưu ý rằng điều này sẽ không hoạt động cho Integerloại, bạn sẽ nhận được lỗi "java.lang.Integer không thể chuyển sang java.lang.Character". Thêm một diễn viên vào intđầu tiên, ví dụ: Character.toString((char)(int)myInteger);
gbmhunter

1
Các igiá trị (0-255) sẽ từ bộ ký tự ISO-8859-1. (Người hỏi đã từ chối xác định "ASCII mở rộng" [thuật ngữ mơ hồ] muốn, ngoại trừ bằng cách chấp nhận câu trả lời này.)
Tom Blodget

59

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


2
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 nó là nhân vật.
DavidS

2
Câu hỏi không phải là về in ấn mà là chuyển đổi.
iAmLearning

29

String.valueOf(Character.toChars(int))

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

Sử dụng Character.toCharslà 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đến char(ví dụ (char) i) đối với một số lý do, kể cả đó Character.toCharssẽ ném một IllegalArgumentExceptionnế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 thu hẹp chuyển đổi nguyên thủy đặc điểm kỹ thuật ), có khả năng đưa ra một đầu ra khác với những gì bạn dự định.


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

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 một điểm chuẩn nhanh để 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 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 xử lý an toàn, xác định và dễ dàng mở rộng ra ngoài phạm vi [0,255] nên được yêu cầu vượt xa hiệu suất nhỏ.
zjs


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

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


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

1

Một cách dễ dàng hơn để làm như vậy:

Nhập số nguyên vào ký tự, hãy int nlà số nguyên, sau đó:

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

Vui lòng giải thích câu trả lời của bạn
Want2learn

0

Tại sao không đơn giản hóa nó thành một phương thức trả về ký tự ascii?

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

-1

Đây là một ví dụ, cho thấy bằng cách chuyển đổi một int thành char, người ta có thể xác định ký tự tương ứng thành 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 đề. Đây là câu trả lời của bạn:

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.