Как преобразовать код ASCII (0-255) в соответствующий ему символ?


135

Как я могу преобразовать в Java код ASCII (который является целым числом из диапазона [0, 255]) в соответствующий ему символ ASCII?

Например:

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

3
это не дубликат, как упомянуто выше. Это не преобразование из целого числа, а из char (ascii)
Chathuranga Chandrasekara

11
Не дубликат «Как преобразовать из int в String?» ... в любом случае, FWIW, ASCII только 7-битный со значениями [0, 127] ;-)

1
@phooji Я думаю, что этот пост говорит о том, как конвертировать 1 -> "1" и т. д.
Belgi

1
@pst - это расширенный ASII ;-)
Belgi

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

1
Эти iзначения (0-255) будет от набора символов ISO-8859-1. (Вопрос Аскер отказался определить , какой «расширенный ASCII» [неопределенный термин] разыскивают, за исключением того, принимая этот ответ.)
Том Blodget

59

System.out.println((char)65); напечатал бы "A"


2
REPL tip: Если вы используете 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.
Стивен С

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


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

В итоге вы получите строку длиной один, единственный символ которой имеет код (ASCII) 65. В Java символы являются числовыми типами данных.


1

Можно итерировать от а до я, как это

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.