Як перетворити код ASCII (0-255) у відповідний його символ?


135

Як я можу перетворити в Java код ASCII (який є цілим числом з діапазону [0, 255]) у відповідний символ ASCII?

Наприклад:

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

3
це не дублікат, як згадувалося вище. Це не перетворення з цілого числа, а з char (ascii)
Чатхуранга Чандрасекара

11
Не дублікат "Як перетворити з int в String?" ... все одно, FWIW, ASCII - це лише 7 біт зі значеннями [0, 127] ;-)

1
@phooji Я думаю, що цей пост каже, як перетворити 1 -> "1" і т. д. "
Бельгія

1
@pst - це розширена ASII ;-)
белги

3
@Belgi - вам потрібно буде чітко вказати ваше кодування, якщо ви хочете правильно перекодувати значення 128-255. Термін "розширений ASCII" не має сенсу.
Макдауелл

Відповіді:


244

Для платформ на базі MIDP 2 / CLDC 1.1 (яких немає Character.toString(char), stackoverflow.com/a/6210938/923560 надає додаткові рішення.
Abdull

Яка причина (char)призначення? Іншими словами, чому я не можу просто поставити Character.toString(i);? (Java noob)
Адам Хьюз

1
Зауважте, що це не буде працювати для Integerтипу, ви отримаєте помилку "java.lang.Integer не можна передавати на java.lang.Character". intСпершу додайте акторський Character.toString((char)(int)myInteger);
склад

1
Ці iзначення (0-255) буде від набору символів ISO-8859-1. (Запитуючий запитання відмовився визначити, який "розширений ASCII" [розпливчастий термін] розшукувався, за винятком прийняття цієї відповіді.)
Том Блоджет

59

System.out.println((char)65); надрукував би "A"


2
Порада REPL: Якщо у вас випадково використовується JShell (Java 9), ви можете опустити System.out. Просто введіть, (char) 65щоб дізнатися, що це за персонаж.
DavidS

2
Питання не в друкуванні, а в конвертації.
iAmLearning

29

String.valueOf(Character.toChars(int))

Якщо припустити, що ціле число становить, як ви кажете, від 0 до 255, ви отримаєте масив з одним символом назад Character.toChars, який стане однорядним рядком при передачі на String.valueOf.

Використання Character.toCharsпереважно методів з участю акторів з intдо char(тобто (char) i) з цілого ряду причин, в тому числі , що Character.toCharsбуде кидатися , IllegalArgumentExceptionякщо ви не правильно перевірити ціле число , а лита проковтне помилку ( в відповідності з звужується специфікації примітивних конверсій ), потенційно даючи вихід, відмінний від того, що ви задумали.


Якщо припустити, що ціле число знаходиться в діапазоні від 0 до 255 (як ви заявляєте, що ви робите ... і як зазначено в питанні), використовувати його не потрібно і неоптимально toChars.
Стівен C

5
Ви абсолютно правильні, що щось на кшталт Character.toString((char) i)швидше, ніж String.valueOf(Character.toChars(i)). Запуск швидкого еталону перетворення 1000 000 випадкових цілих чисел у заданому діапазоні (100 разів, щоб бути безпечним) на моїй машині дає середній час 153,07 наносекунд проти 862,39 наносекунд. Однак у будь-якому цікавому застосуванні оптимізуватимуться набагато важливіші речі. Додана цінність безпечного, детермінованого поводження та простота розширення за межами [0,255] діапазону, якщо це буде потрібно, переважає незначний показник ефективності.
zjs


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

Ви отримаєте рядок завдовжки один, чий один символ має код (ASCII) 65. У Java символах є числові типи даних.


1

Можна повторити від a до z, як це

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

1

Простіший спосіб зробити те ж саме:

Введіть ціле число для символу, нехай int nбуде ціле число, а потім:

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

Поясніть, будь ласка, свою відповідь
want2learn

0

Чому б не спростити його до методу, який повертає характер ascii?

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

-1

Це приклад, який показує, що перетворюючи int в char, можна визначити відповідний символ до коду ASCII.

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.